about summary refs log tree commit diff
path: root/tests/ui/macros/macro-rules-attr-error.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2025-10-02 11:14:37 +0000
committerbors <bors@rust-lang.org>2025-10-02 11:14:37 +0000
commit94ecb52bbeeccc990545d4ebc9e9c35dcaf285e3 (patch)
treeb3836c3f29d9f4ce549e329a6234adc437c1d5aa /tests/ui/macros/macro-rules-attr-error.rs
parent4b9c62b4da3e17cee99d3d2052f1c576b188e2a8 (diff)
parent2d1efe76bcf0871a580476841141441742198310 (diff)
downloadrust-94ecb52bbeeccc990545d4ebc9e9c35dcaf285e3.tar.gz
rust-94ecb52bbeeccc990545d4ebc9e9c35dcaf285e3.zip
Auto merge of #147261 - matthiaskrgr:rollup-yh3fgvc, r=matthiaskrgr
Rollup of 9 pull requests

Successful merges:

 - rust-lang/rust#146281 (Support `#[rustc_align_static]` inside `thread_local!`)
 - rust-lang/rust#146535 (mbe: Implement `unsafe` attribute rules)
 - rust-lang/rust#146585 (indexing: reword help)
 - rust-lang/rust#147004 (Tweak handling of "struct like start" where a struct isn't supported)
 - rust-lang/rust#147221 (Forbid `//@ compile-flags: -Cincremental=` in tests)
 - rust-lang/rust#147225 (Don't enable shared memory by default with Wasm atomics)
 - rust-lang/rust#147227 (implement `Box::take`)
 - rust-lang/rust#147233 (Initialize llvm submodule if not already the case to run citool)
 - rust-lang/rust#147236 (Update books)

r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'tests/ui/macros/macro-rules-attr-error.rs')
-rw-r--r--tests/ui/macros/macro-rules-attr-error.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/tests/ui/macros/macro-rules-attr-error.rs b/tests/ui/macros/macro-rules-attr-error.rs
index 81eadb6692f..60290b883cb 100644
--- a/tests/ui/macros/macro-rules-attr-error.rs
+++ b/tests/ui/macros/macro-rules-attr-error.rs
@@ -50,3 +50,22 @@ macro_rules! forward_referenced_attr {
 macro_rules! cyclic_attr {
     attr() {} => {}
 }
+
+macro_rules! attr_with_safety {
+    unsafe attr() { struct RequiresUnsafe; } => {};
+    attr() { struct SafeInvocation; } => {};
+}
+
+#[attr_with_safety]
+struct SafeInvocation;
+
+//~v ERROR: unnecessary `unsafe` on safe attribute invocation
+#[unsafe(attr_with_safety)]
+struct SafeInvocation;
+
+//~v ERROR: unsafe attribute invocation requires `unsafe`
+#[attr_with_safety]
+struct RequiresUnsafe;
+
+#[unsafe(attr_with_safety)]
+struct RequiresUnsafe;