Skip to content

Commit

Permalink
Forbid the use of #[target_feature] on main
Browse files Browse the repository at this point in the history
  • Loading branch information
LeSeulArtichaut committed Mar 2, 2023
1 parent 18caf88 commit aa67dbe
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 1 deletion.
2 changes: 2 additions & 0 deletions compiler/rustc_hir_analysis/locales/en-US.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ hir_analysis_where_clause_on_main = `main` function is not allowed to have a `wh
hir_analysis_track_caller_on_main = `main` function is not allowed to be `#[track_caller]`
.suggestion = remove this annotation
hir_analysis_target_feature_on_main = `main` function is not allowed to have `#[target_feature]`
hir_analysis_start_not_track_caller = `start` is not allowed to be `#[track_caller]`
.label = `start` is not allowed to be `#[track_caller]`
Expand Down
8 changes: 8 additions & 0 deletions compiler/rustc_hir_analysis/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,14 @@ pub(crate) struct TrackCallerOnMain {
pub annotated: Span,
}

#[derive(Diagnostic)]
#[diag(hir_analysis_target_feature_on_main)]
pub(crate) struct TargetFeatureOnMain {
#[primary_span]
#[label(hir_analysis_target_feature_on_main)]
pub main: Span,
}

#[derive(Diagnostic)]
#[diag(hir_analysis_start_not_track_caller)]
pub(crate) struct StartTrackCaller {
Expand Down
5 changes: 5 additions & 0 deletions compiler/rustc_hir_analysis/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,11 @@ fn check_main_fn_ty(tcx: TyCtxt<'_>, main_def_id: DefId) {
error = true;
}

if !tcx.codegen_fn_attrs(main_def_id).target_features.is_empty() {
tcx.sess.emit_err(errors::TargetFeatureOnMain { main: main_span });
error = true;
}

if error {
return;
}
Expand Down
4 changes: 3 additions & 1 deletion tests/ui/asm/x86_64/issue-89875.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
use std::arch::asm;

#[target_feature(enable = "avx")]
fn main() {
fn foo() {
unsafe {
asm!(
"/* {} */",
out(ymm_reg) _,
);
}
}

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// only-x86_64

#[target_feature(enable = "avx2")]
fn main() {}
//~^ ERROR `main` function is not allowed to have `#[target_feature]`
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: `main` function is not allowed to have `#[target_feature]`
--> $DIR/issue-108645-target-feature-on-main.rs:4:1
|
LL | fn main() {}
| ^^^^^^^^^ `main` function is not allowed to have `#[target_feature]`

error: aborting due to previous error

0 comments on commit aa67dbe

Please sign in to comment.