From 2c4a593b5c46ad971bdca7371bc268d12bd51a31 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 7 Nov 2025 16:41:36 +0100 Subject: [PATCH] Add regression tests for keywords wrongly considered as macros --- .../failing-expansion-on-wrong-macro.rs | 13 ++++++++ .../source-code-pages/keyword-macros.rs | 30 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 tests/rustdoc/source-code-pages/failing-expansion-on-wrong-macro.rs create mode 100644 tests/rustdoc/source-code-pages/keyword-macros.rs diff --git a/tests/rustdoc/source-code-pages/failing-expansion-on-wrong-macro.rs b/tests/rustdoc/source-code-pages/failing-expansion-on-wrong-macro.rs new file mode 100644 index 000000000000..017d0be06560 --- /dev/null +++ b/tests/rustdoc/source-code-pages/failing-expansion-on-wrong-macro.rs @@ -0,0 +1,13 @@ +// This code crashed because a `if` followed by a `!` was considered a macro, +// creating an invalid class stack. +// Regression test for . + +//@ compile-flags: -Zunstable-options --generate-macro-expansion + +enum Enum { + Variant, +} + +pub fn repro() { + if !matches!(Enum::Variant, Enum::Variant) {} +} diff --git a/tests/rustdoc/source-code-pages/keyword-macros.rs b/tests/rustdoc/source-code-pages/keyword-macros.rs new file mode 100644 index 000000000000..e5f1a7a3ea0e --- /dev/null +++ b/tests/rustdoc/source-code-pages/keyword-macros.rs @@ -0,0 +1,30 @@ +// This test ensures that keywords which can be followed by values (and therefore `!`) +// are not considered as macros. +// This is a regression test for . + +#![crate_name = "foo"] +#![feature(negative_impls)] + +//@ has 'src/foo/keyword-macros.rs.html' + +//@ has - '//*[@class="rust"]//*[@class="number"]' '2' +//@ has - '//*[@class="rust"]//*[@class="number"]' '0' +//@ has - '//*[@class="rust"]//*[@class="number"]' '1' +const ARR: [u8; 2] = [!0,! 1]; + +trait X {} + +//@ has - '//*[@class="rust"]//*[@class="kw"]' 'impl' +impl !X for i32 {} + +fn a() { + //@ has - '//*[@class="rust"]//*[@class="kw"]' 'if' + if! true{} + //@ has - '//*[@class="rust"]//*[@class="kw"]' 'match' + match !true { _ => {} } + //@ has - '//*[@class="rust"]//*[@class="kw"]' 'while' + let _ = while !true { + //@ has - '//*[@class="rust"]//*[@class="kw"]' 'break' + break !true; + }; +}