Rollup merge of #69154 - JohnTitor:fix-macro-ices, r=petrochenkov
Avoid calling `fn_sig` on closures Fixes #68060 r? @petrochenkov
This commit is contained in:
commit
c115ad927a
3 changed files with 42 additions and 2 deletions
|
@ -2280,7 +2280,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
|
||||||
} else if attr.check_name(sym::thread_local) {
|
} else if attr.check_name(sym::thread_local) {
|
||||||
codegen_fn_attrs.flags |= CodegenFnAttrFlags::THREAD_LOCAL;
|
codegen_fn_attrs.flags |= CodegenFnAttrFlags::THREAD_LOCAL;
|
||||||
} else if attr.check_name(sym::track_caller) {
|
} else if attr.check_name(sym::track_caller) {
|
||||||
if tcx.fn_sig(id).abi() != abi::Abi::Rust {
|
if tcx.is_closure(id) || tcx.fn_sig(id).abi() != abi::Abi::Rust {
|
||||||
struct_span_err!(tcx.sess, attr.span, E0737, "`#[track_caller]` requires Rust ABI")
|
struct_span_err!(tcx.sess, attr.span, E0737, "`#[track_caller]` requires Rust ABI")
|
||||||
.emit();
|
.emit();
|
||||||
}
|
}
|
||||||
|
@ -2301,7 +2301,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
|
||||||
codegen_fn_attrs.export_name = Some(s);
|
codegen_fn_attrs.export_name = Some(s);
|
||||||
}
|
}
|
||||||
} else if attr.check_name(sym::target_feature) {
|
} else if attr.check_name(sym::target_feature) {
|
||||||
if tcx.fn_sig(id).unsafety() == Unsafety::Normal {
|
if tcx.is_closure(id) || tcx.fn_sig(id).unsafety() == Unsafety::Normal {
|
||||||
let msg = "`#[target_feature(..)]` can only be applied to `unsafe` functions";
|
let msg = "`#[target_feature(..)]` can only be applied to `unsafe` functions";
|
||||||
tcx.sess
|
tcx.sess
|
||||||
.struct_span_err(attr.span, msg)
|
.struct_span_err(attr.span, msg)
|
||||||
|
|
16
src/test/ui/macros/issue-68060.rs
Normal file
16
src/test/ui/macros/issue-68060.rs
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
// build-fail
|
||||||
|
|
||||||
|
#![feature(track_caller)]
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
(0..)
|
||||||
|
.map(
|
||||||
|
#[target_feature(enable = "")]
|
||||||
|
//~^ ERROR: the feature named `` is not valid for this target
|
||||||
|
//~| ERROR: `#[target_feature(..)]` can only be applied to `unsafe` functions
|
||||||
|
#[track_caller]
|
||||||
|
//~^ ERROR: `#[track_caller]` requires Rust ABI
|
||||||
|
|_| (),
|
||||||
|
)
|
||||||
|
.next();
|
||||||
|
}
|
24
src/test/ui/macros/issue-68060.stderr
Normal file
24
src/test/ui/macros/issue-68060.stderr
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
error: `#[target_feature(..)]` can only be applied to `unsafe` functions
|
||||||
|
--> $DIR/issue-68060.rs:8:13
|
||||||
|
|
|
||||||
|
LL | #[target_feature(enable = "")]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can only be applied to `unsafe` functions
|
||||||
|
...
|
||||||
|
LL | |_| (),
|
||||||
|
| ------ not an `unsafe` function
|
||||||
|
|
||||||
|
error: the feature named `` is not valid for this target
|
||||||
|
--> $DIR/issue-68060.rs:8:30
|
||||||
|
|
|
||||||
|
LL | #[target_feature(enable = "")]
|
||||||
|
| ^^^^^^^^^^^ `` is not valid for this target
|
||||||
|
|
||||||
|
error[E0737]: `#[track_caller]` requires Rust ABI
|
||||||
|
--> $DIR/issue-68060.rs:11:13
|
||||||
|
|
|
||||||
|
LL | #[track_caller]
|
||||||
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0737`.
|
Loading…
Add table
Add a link
Reference in a new issue