diff options
| author | Folkert <folkert@folkertdev.nl> | 2024-07-17 00:03:33 +0200 |
|---|---|---|
| committer | Folkert <folkert@folkertdev.nl> | 2024-07-17 00:04:00 +0200 |
| commit | 4d082b77af1f714df6c407785e1961a9dddd554c (patch) | |
| tree | c73cb2325d16e38d91e13de25cd951574242d56f /compiler/rustc_builtin_macros/src | |
| parent | 7e6c083873b7b98aa52d47896107af11560aeaf5 (diff) | |
| download | rust-4d082b77af1f714df6c407785e1961a9dddd554c.tar.gz rust-4d082b77af1f714df6c407785e1961a9dddd554c.zip | |
add error message when `#[naked]` is used with `#[test]`
Diffstat (limited to 'compiler/rustc_builtin_macros/src')
| -rw-r--r-- | compiler/rustc_builtin_macros/src/errors.rs | 10 | ||||
| -rw-r--r-- | compiler/rustc_builtin_macros/src/test.rs | 8 |
2 files changed, 18 insertions, 0 deletions
diff --git a/compiler/rustc_builtin_macros/src/errors.rs b/compiler/rustc_builtin_macros/src/errors.rs index 49d640436c2..24706a3b054 100644 --- a/compiler/rustc_builtin_macros/src/errors.rs +++ b/compiler/rustc_builtin_macros/src/errors.rs @@ -912,3 +912,13 @@ pub(crate) struct ExpectedItem<'a> { pub span: Span, pub token: &'a str, } + +#[derive(Diagnostic)] +#[diag(builtin_macros_naked_functions_testing_attribute, code = E0798)] +pub struct NakedFunctionTestingAttribute { + #[primary_span] + #[label(builtin_macros_naked_attribute)] + pub naked_span: Span, + #[label] + pub testing_span: Span, +} diff --git a/compiler/rustc_builtin_macros/src/test.rs b/compiler/rustc_builtin_macros/src/test.rs index c0310a2f4b0..bb00c8de1b8 100644 --- a/compiler/rustc_builtin_macros/src/test.rs +++ b/compiler/rustc_builtin_macros/src/test.rs @@ -133,6 +133,14 @@ pub(crate) fn expand_test_or_bench( }; }; + if let Some(attr) = attr::find_by_name(&item.attrs, sym::naked) { + cx.dcx().emit_err(errors::NakedFunctionTestingAttribute { + testing_span: attr_sp, + naked_span: attr.span, + }); + return vec![Annotatable::Item(item)]; + } + // check_*_signature will report any errors in the type so compilation // will fail. We shouldn't try to expand in this case because the errors // would be spurious. |
