Skip to content

Commit dea1661

Browse files
committed
Auto merge of #137502 - compiler-errors:global-asm-aint-mir-body, r=oli-obk
Don't include global asm in `mir_keys`, fix error body synthesis r? oli-obk Fixes #137470 Fixes #137471 Fixes #137472 Fixes #137473 try-job: test-various try-job: x86_64-apple-2
2 parents efea989 + 5339d4e commit dea1661

File tree

6 files changed

+54
-7
lines changed

6 files changed

+54
-7
lines changed

compiler/rustc_mir_build/src/builder/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,8 @@ fn construct_error(tcx: TyCtxt<'_>, def_id: LocalDefId, guar: ErrorGuaranteed) -
612612
| DefKind::AssocConst
613613
| DefKind::AnonConst
614614
| DefKind::InlineConst
615-
| DefKind::Static { .. } => (vec![], tcx.type_of(def_id).instantiate_identity(), None),
615+
| DefKind::Static { .. }
616+
| DefKind::GlobalAsm => (vec![], tcx.type_of(def_id).instantiate_identity(), None),
616617
DefKind::Ctor(..) | DefKind::Fn | DefKind::AssocFn => {
617618
let sig = tcx.liberate_late_bound_regions(
618619
def_id.to_def_id(),

compiler/rustc_mir_transform/src/lib.rs

+4
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,10 @@ fn mir_keys(tcx: TyCtxt<'_>, (): ()) -> FxIndexSet<LocalDefId> {
316316
// All body-owners have MIR associated with them.
317317
let mut set: FxIndexSet<_> = tcx.hir_body_owners().collect();
318318

319+
// Remove the fake bodies for `global_asm!`, since they're not useful
320+
// to be emitted (`--emit=mir`) or encoded (in metadata).
321+
set.retain(|&def_id| !matches!(tcx.def_kind(def_id), DefKind::GlobalAsm));
322+
319323
// Coroutine-closures (e.g. async closures) have an additional by-move MIR
320324
// body that isn't in the HIR.
321325
for body_owner in tcx.hir_body_owners() {

tests/codegen/target-feature-inline-closure.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::arch::x86_64::*;
1212
#[cfg(target_arch = "x86_64")]
1313
#[target_feature(enable = "avx")]
1414
fn with_avx(x: __m256) -> __m256 {
15-
// CHECK: fadd
15+
// CHECK: fadd <8 x float>
1616
let add = {
1717
#[inline(always)]
1818
|x, y| unsafe { _mm256_add_ps(x, y) }
@@ -24,14 +24,10 @@ fn with_avx(x: __m256) -> __m256 {
2424
#[no_mangle]
2525
#[cfg(target_arch = "x86_64")]
2626
unsafe fn without_avx(x: __m256) -> __m256 {
27-
// CHECK-NOT: fadd
27+
// CHECK-NOT: fadd <8 x float>
2828
let add = {
2929
#[inline(always)]
3030
|x, y| unsafe { _mm256_add_ps(x, y) }
3131
};
3232
add(x, x)
3333
}
34-
35-
// Don't allow the above CHECK-NOT to accidentally match a commit hash in the
36-
// compiler version.
37-
// CHECK-LABEL: rustc version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//@ revisions: emit_mir instrument cfi
2+
3+
// Make sure we don't try to emit MIR for it.
4+
//@[emit_mir] compile-flags: --emit=mir
5+
6+
// Make sure we don't try to instrument it.
7+
//@[instrument] compile-flags: -Cinstrument-coverage -Zno-profiler-runtime
8+
//@[instrument] only-linux
9+
10+
// Make sure we don't try to CFI encode it.
11+
//@[cfi] compile-flags: -Zsanitizer=cfi -Ccodegen-units=1 -Clto -Ctarget-feature=-crt-static -Clink-dead-code=true
12+
//@[cfi] needs-sanitizer-cfi
13+
//@[cfi] no-prefer-dynamic
14+
// FIXME(#122848) Remove only-linux once OSX CFI binaries work
15+
//@[cfi] only-linux
16+
17+
//@ build-pass
18+
//@ needs-asm-support
19+
20+
use std::arch::global_asm;
21+
22+
fn foo() {}
23+
24+
global_asm!("/* {} */", sym foo);
25+
26+
fn main() {}

tests/ui/asm/global-asm-with-error.rs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Ensure that we don't ICE when constructing the fake MIR body for a global
2+
// asm when the body has errors. See #137470.
3+
4+
//@ needs-asm-support
5+
6+
use std::arch::global_asm;
7+
8+
global_asm!("/* {} */", sym a);
9+
//~^ ERROR cannot find value `a` in this scope
10+
11+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
error[E0425]: cannot find value `a` in this scope
2+
--> $DIR/global-asm-with-error.rs:8:29
3+
|
4+
LL | global_asm!("/* {} */", sym a);
5+
| ^ not found in this scope
6+
7+
error: aborting due to 1 previous error
8+
9+
For more information about this error, try `rustc --explain E0425`.

0 commit comments

Comments
 (0)