From: Owen Avery <powerboat9.ga...@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.ga...@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(-)

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);
-- 
2.40.0

Reply via email to