about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNadrieril <nadrieril+git@gmail.com>2024-12-07 12:49:08 +0100
committerNadrieril <nadrieril+git@gmail.com>2024-12-07 13:37:35 +0100
commit2459dbb4bad87c38284b0a2ba4f2d6d37db99627 (patch)
tree72446ee03c41f1762fde0bbc97d2ff21b352f9c6
parent483f9e258055bcd37c162cbf2af24aa7450ab0ea (diff)
downloadrust-2459dbb4bad87c38284b0a2ba4f2d6d37db99627.tar.gz
rust-2459dbb4bad87c38284b0a2ba4f2d6d37db99627.zip
Address review comments
-rw-r--r--compiler/rustc_ast_pretty/src/pprust/state.rs2
-rw-r--r--tests/ui/pattern/rfc-3637-guard-patterns/macro-rules.rs20
2 files changed, 22 insertions, 0 deletions
diff --git a/compiler/rustc_ast_pretty/src/pprust/state.rs b/compiler/rustc_ast_pretty/src/pprust/state.rs
index 32eea2befbf..fd2e97a79ca 100644
--- a/compiler/rustc_ast_pretty/src/pprust/state.rs
+++ b/compiler/rustc_ast_pretty/src/pprust/state.rs
@@ -1710,10 +1710,12 @@ impl<'a> State<'a> {
                 }
             }
             PatKind::Guard(subpat, condition) => {
+                self.popen();
                 self.print_pat(subpat);
                 self.space();
                 self.word_space("if");
                 self.print_expr(condition, FixupContext::default());
+                self.pclose();
             }
             PatKind::Slice(elts) => {
                 self.word("[");
diff --git a/tests/ui/pattern/rfc-3637-guard-patterns/macro-rules.rs b/tests/ui/pattern/rfc-3637-guard-patterns/macro-rules.rs
new file mode 100644
index 00000000000..76681f45bb3
--- /dev/null
+++ b/tests/ui/pattern/rfc-3637-guard-patterns/macro-rules.rs
@@ -0,0 +1,20 @@
+//@ run-pass
+//! Tests that the addition of guard patterns does not change the behavior of the `pat` macro
+//! fragment.
+#![feature(guard_patterns)]
+#![allow(incomplete_features)]
+
+macro_rules! has_guard {
+    ($p:pat) => {
+        false
+    };
+    ($p:pat if $e:expr) => {
+        true
+    };
+}
+
+fn main() {
+    assert_eq!(has_guard!(Some(_)), false);
+    assert_eq!(has_guard!(Some(_) if true), true);
+    assert_eq!(has_guard!((Some(_) if true)), false);
+}