public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/rust/master] Add error message for AltPattern in let statements
@ 2023-05-02  7:08 Thomas Schwinge
  0 siblings, 0 replies; only message in thread
From: Thomas Schwinge @ 2023-05-02  7:08 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:428a31804b8c56fd8aee8b7db7adf087e350ad60

commit 428a31804b8c56fd8aee8b7db7adf087e350ad60
Author: Owen Avery <powerboat9.gamer@gmail.com>
Date:   Fri Apr 21 01:43:25 2023 -0400

    Add error message for AltPattern in let statements
    
    gcc/rust/ChangeLog:
    
            * hir/rust-ast-lower-pattern.cc
            (ASTLoweringPattern::translate): Add is_let_top_level parameter.
            (ASTLoweringPattern::visit): Handle is_let_top_level.
            * hir/rust-ast-lower-pattern.h
            (class ASTLoweringPattern): Add is_let_top_level.
            * hir/rust-ast-lower-stmt.cc
            (ASTLoweringStmt::visit): Set is_let_top_level.
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/let_alt.rs: New test.
    
    Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>

Diff:
---
 gcc/rust/hir/rust-ast-lower-pattern.cc | 8 +++++++-
 gcc/rust/hir/rust-ast-lower-pattern.h  | 4 +++-
 gcc/rust/hir/rust-ast-lower-stmt.cc    | 2 +-
 gcc/testsuite/rust/compile/let_alt.rs  | 4 ++++
 4 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/gcc/rust/hir/rust-ast-lower-pattern.cc b/gcc/rust/hir/rust-ast-lower-pattern.cc
index 646e6238bce..b37d66395d5 100644
--- a/gcc/rust/hir/rust-ast-lower-pattern.cc
+++ b/gcc/rust/hir/rust-ast-lower-pattern.cc
@@ -25,9 +25,10 @@ namespace HIR {
 ASTLoweringPattern::ASTLoweringPattern () : translated (nullptr) {}
 
 HIR::Pattern *
-ASTLoweringPattern::translate (AST::Pattern *pattern)
+ASTLoweringPattern::translate (AST::Pattern *pattern, bool is_let_top_level)
 {
   ASTLoweringPattern resolver;
+  resolver.is_let_top_level = is_let_top_level;
   pattern->accept_vis (resolver);
 
   rust_assert (resolver.translated != nullptr);
@@ -315,6 +316,11 @@ ASTLoweringPattern::visit (AST::AltPattern &pattern)
 
   translated
     = new HIR::AltPattern (mapping, std::move (alts), pattern.get_locus ());
+
+  if (is_let_top_level)
+    rust_error_at (pattern.get_locus (),
+		   "top level alternate patterns are not allowed for %<let%> "
+		   "bindings - use an outer grouped pattern");
 }
 
 } // namespace HIR
diff --git a/gcc/rust/hir/rust-ast-lower-pattern.h b/gcc/rust/hir/rust-ast-lower-pattern.h
index 4f265e3768f..597a5d22f37 100644
--- a/gcc/rust/hir/rust-ast-lower-pattern.h
+++ b/gcc/rust/hir/rust-ast-lower-pattern.h
@@ -29,7 +29,8 @@ class ASTLoweringPattern : public ASTLoweringBase
   using Rust::HIR::ASTLoweringBase::visit;
 
 public:
-  static HIR::Pattern *translate (AST::Pattern *pattern);
+  static HIR::Pattern *translate (AST::Pattern *pattern,
+				  bool is_let_top_level = false);
 
   void visit (AST::IdentifierPattern &pattern) override;
   void visit (AST::PathInExpression &pattern) override;
@@ -48,6 +49,7 @@ private:
   ASTLoweringPattern ();
 
   HIR::Pattern *translated;
+  bool is_let_top_level;
 };
 
 } // namespace HIR
diff --git a/gcc/rust/hir/rust-ast-lower-stmt.cc b/gcc/rust/hir/rust-ast-lower-stmt.cc
index be9add9b8b5..dc14cb0608f 100644
--- a/gcc/rust/hir/rust-ast-lower-stmt.cc
+++ b/gcc/rust/hir/rust-ast-lower-stmt.cc
@@ -108,7 +108,7 @@ void
 ASTLoweringStmt::visit (AST::LetStmt &stmt)
 {
   HIR::Pattern *variables
-    = ASTLoweringPattern::translate (stmt.get_pattern ().get ());
+    = ASTLoweringPattern::translate (stmt.get_pattern ().get (), true);
   HIR::Type *type = stmt.has_type ()
 		      ? ASTLoweringType::translate (stmt.get_type ().get ())
 		      : nullptr;
diff --git a/gcc/testsuite/rust/compile/let_alt.rs b/gcc/testsuite/rust/compile/let_alt.rs
new file mode 100644
index 00000000000..1284627bb72
--- /dev/null
+++ b/gcc/testsuite/rust/compile/let_alt.rs
@@ -0,0 +1,4 @@
+fn main() {
+    let _a | _a = 12;
+    // { dg-error "top level alternate patterns are not allowed" "" { target *-*-* } .-1 }
+}

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-05-02  7:08 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-02  7:08 [gcc/devel/rust/master] Add error message for AltPattern in let statements Thomas Schwinge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).