[committed,68/88] gccrs: Simplify WildcardPattern let statement handling

Message ID 20230405140411.3016563-69-arthur.cohen@embecosm.com
State Accepted
Headers
Series [committed,01/88] gccrs: fatal_error_flag: Fix typo in error message |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Arthur Cohen April 5, 2023, 2:03 p.m. UTC
  From: Owen Avery <powerboat9.gamer@gmail.com>

gcc/rust/ChangeLog:

	* backend/rust-compile-pattern.cc
	(CompilePatternLet::visit): Simplify WildcardPattern compilation for let statements.
	* backend/rust-compile-var-decl.h:
	(CompileVarDecl::visit): Remove variable declaration for WildcardPattern.
	* resolve/rust-ast-resolve-pattern.h:
	(PatternDeclaration::visit): Remove name resolution for WildcardPattern.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
---
 gcc/rust/backend/rust-compile-pattern.cc    | 28 +++++----------------
 gcc/rust/backend/rust-compile-var-decl.h    | 16 +-----------
 gcc/rust/resolve/rust-ast-resolve-pattern.h |  7 ------
 3 files changed, 7 insertions(+), 44 deletions(-)
  

Patch

diff --git a/gcc/rust/backend/rust-compile-pattern.cc b/gcc/rust/backend/rust-compile-pattern.cc
index cb4b082f9c8..d98f7beb0e8 100644
--- a/gcc/rust/backend/rust-compile-pattern.cc
+++ b/gcc/rust/backend/rust-compile-pattern.cc
@@ -361,30 +361,14 @@  CompilePatternLet::visit (HIR::IdentifierPattern &pattern)
 void
 CompilePatternLet::visit (HIR::WildcardPattern &pattern)
 {
-  Bvariable *var = nullptr;
-  rust_assert (
-    ctx->lookup_var_decl (pattern.get_pattern_mappings ().get_hirid (), &var));
-
-  auto fnctx = ctx->peek_fn ();
-  if (ty->is_unit ())
-    {
-      ctx->add_statement (init_expr);
+  tree init_stmt = NULL;
+  tree stmt_type = TyTyResolveCompile::compile (ctx, ty);
 
-      tree stmt_type = TyTyResolveCompile::compile (ctx, ty);
+  ctx->get_backend ()->temporary_variable (ctx->peek_fn ().fndecl, NULL_TREE,
+					   stmt_type, init_expr, false,
+					   pattern.get_locus (), &init_stmt);
 
-      auto unit_type_init_expr
-	= ctx->get_backend ()->constructor_expression (stmt_type, false, {}, -1,
-						       rval_locus);
-      auto s = ctx->get_backend ()->init_statement (fnctx.fndecl, var,
-						    unit_type_init_expr);
-      ctx->add_statement (s);
-    }
-  else
-    {
-      auto s
-	= ctx->get_backend ()->init_statement (fnctx.fndecl, var, init_expr);
-      ctx->add_statement (s);
-    }
+  ctx->add_statement (init_stmt);
 }
 
 void
diff --git a/gcc/rust/backend/rust-compile-var-decl.h b/gcc/rust/backend/rust-compile-var-decl.h
index 9e07999f273..13b429d41e1 100644
--- a/gcc/rust/backend/rust-compile-var-decl.h
+++ b/gcc/rust/backend/rust-compile-var-decl.h
@@ -53,21 +53,6 @@  public:
     locals.push_back (var);
   }
 
-  void visit (HIR::WildcardPattern &pattern) override
-  {
-    translated_type = ctx->get_backend ()->immutable_type (translated_type);
-
-    Bvariable *var
-      = ctx->get_backend ()->local_variable (fndecl, "_", translated_type,
-					     NULL /*decl_var*/,
-					     pattern.get_locus ());
-
-    HirId stmt_id = pattern.get_pattern_mappings ().get_hirid ();
-    ctx->insert_var_decl (stmt_id, var);
-
-    locals.push_back (var);
-  }
-
   // Empty visit for unused Pattern HIR nodes.
   void visit (HIR::LiteralPattern &) override {}
   void visit (HIR::PathInExpression &) override {}
@@ -78,6 +63,7 @@  public:
   void visit (HIR::StructPattern &) override {}
   void visit (HIR::TuplePattern &) override {}
   void visit (HIR::TupleStructPattern &) override {}
+  void visit (HIR::WildcardPattern &) override {}
 
 private:
   CompileVarDecl (Context *ctx, tree fndecl, tree translated_type,
diff --git a/gcc/rust/resolve/rust-ast-resolve-pattern.h b/gcc/rust/resolve/rust-ast-resolve-pattern.h
index 3e74f0a4cc6..4c7d13a16d0 100644
--- a/gcc/rust/resolve/rust-ast-resolve-pattern.h
+++ b/gcc/rust/resolve/rust-ast-resolve-pattern.h
@@ -70,13 +70,6 @@  public:
       pattern.get_node_id (), pattern.get_locus (), type);
   }
 
-  void visit (AST::WildcardPattern &pattern) override
-  {
-    resolver->get_name_scope ().insert (
-      CanonicalPath::new_seg (pattern.get_node_id (), "_"),
-      pattern.get_node_id (), pattern.get_locus (), type);
-  }
-
   void visit (AST::GroupedPattern &pattern) override
   {
     pattern.get_pattern_in_parens ()->accept_vis (*this);