Forbid the use of #[target_feature]
on start
This commit is contained in:
parent
db26693982
commit
963305bda8
@ -133,6 +133,9 @@ hir_analysis_target_feature_on_main = `main` function is not allowed to have `#[
|
||||
hir_analysis_start_not_track_caller = `start` is not allowed to be `#[track_caller]`
|
||||
.label = `start` is not allowed to be `#[track_caller]`
|
||||
|
||||
hir_analysis_start_not_target_feature = `start` is not allowed to have `#[target_feature]`
|
||||
.label = `start` is not allowed to have `#[target_feature]`
|
||||
|
||||
hir_analysis_start_not_async = `start` is not allowed to be `async`
|
||||
.label = `start` is not allowed to be `async`
|
||||
|
||||
|
@ -344,6 +344,15 @@ pub(crate) struct StartTrackCaller {
|
||||
pub start: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(hir_analysis_start_not_target_feature)]
|
||||
pub(crate) struct StartTargetFeature {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
#[label]
|
||||
pub start: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(hir_analysis_start_not_async, code = "E0752")]
|
||||
pub(crate) struct StartAsync {
|
||||
|
@ -378,6 +378,13 @@ fn check_start_fn_ty(tcx: TyCtxt<'_>, start_def_id: DefId) {
|
||||
});
|
||||
error = true;
|
||||
}
|
||||
if attr.has_name(sym::target_feature) {
|
||||
tcx.sess.emit_err(errors::StartTargetFeature {
|
||||
span: attr.span,
|
||||
start: start_span,
|
||||
});
|
||||
error = true;
|
||||
}
|
||||
}
|
||||
|
||||
if error {
|
||||
|
@ -0,0 +1,9 @@
|
||||
// only-x86_64
|
||||
|
||||
#![feature(start)]
|
||||
#![feature(target_feature_11)]
|
||||
|
||||
#[start]
|
||||
#[target_feature(enable = "avx2")]
|
||||
//~^ ERROR `start` is not allowed to have `#[target_feature]`
|
||||
fn start(_argc: isize, _argv: *const *const u8) -> isize { 0 }
|
@ -0,0 +1,11 @@
|
||||
error: `start` is not allowed to have `#[target_feature]`
|
||||
--> $DIR/issue-108645-target-feature-on-start.rs:7:1
|
||||
|
|
||||
LL | #[target_feature(enable = "avx2")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL |
|
||||
LL | fn start(_argc: isize, _argv: *const *const u8) -> isize { 0 }
|
||||
| -------------------------------------------------------- `start` is not allowed to have `#[target_feature]`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
x
Reference in New Issue
Block a user