diff options
| author | Michael Goulet <michael@errs.io> | 2025-02-23 22:54:36 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2025-03-06 17:34:17 +0000 |
| commit | c867b8f11dbf0be397ba9b5c898fde95f8d5ea6c (patch) | |
| tree | c891942b163e1f81eefc87db4d32d3fe64b79e96 | |
| parent | 30f168ef811aec63124eac677e14699baa9395bd (diff) | |
| download | rust-c867b8f11dbf0be397ba9b5c898fde95f8d5ea6c.tar.gz rust-c867b8f11dbf0be397ba9b5c898fde95f8d5ea6c.zip | |
Construct MIR error body for global_asm correctly
| -rw-r--r-- | compiler/rustc_mir_build/src/builder/mod.rs | 3 | ||||
| -rw-r--r-- | tests/ui/asm/global-asm-with-error.rs | 11 | ||||
| -rw-r--r-- | tests/ui/asm/global-asm-with-error.stderr | 9 |
3 files changed, 22 insertions, 1 deletions
diff --git a/compiler/rustc_mir_build/src/builder/mod.rs b/compiler/rustc_mir_build/src/builder/mod.rs index 94955954934..dc869b885a0 100644 --- a/compiler/rustc_mir_build/src/builder/mod.rs +++ b/compiler/rustc_mir_build/src/builder/mod.rs @@ -612,7 +612,8 @@ fn construct_error(tcx: TyCtxt<'_>, def_id: LocalDefId, guar: ErrorGuaranteed) - | DefKind::AssocConst | DefKind::AnonConst | DefKind::InlineConst - | DefKind::Static { .. } => (vec![], tcx.type_of(def_id).instantiate_identity(), None), + | DefKind::Static { .. } + | DefKind::GlobalAsm => (vec![], tcx.type_of(def_id).instantiate_identity(), None), DefKind::Ctor(..) | DefKind::Fn | DefKind::AssocFn => { let sig = tcx.liberate_late_bound_regions( def_id.to_def_id(), diff --git a/tests/ui/asm/global-asm-with-error.rs b/tests/ui/asm/global-asm-with-error.rs new file mode 100644 index 00000000000..c2253e3cb87 --- /dev/null +++ b/tests/ui/asm/global-asm-with-error.rs @@ -0,0 +1,11 @@ +// Ensure that we don't ICE when constructing the fake MIR body for a global +// asm when the body has errors. See #137470. + +//@ needs-asm-support + +use std::arch::global_asm; + +global_asm!("/* {} */", sym a); +//~^ ERROR cannot find value `a` in this scope + +fn main() {} diff --git a/tests/ui/asm/global-asm-with-error.stderr b/tests/ui/asm/global-asm-with-error.stderr new file mode 100644 index 00000000000..6c07a9f020d --- /dev/null +++ b/tests/ui/asm/global-asm-with-error.stderr @@ -0,0 +1,9 @@ +error[E0425]: cannot find value `a` in this scope + --> $DIR/global-asm-with-error.rs:6:29 + | +LL | global_asm!("/* {} */", sym a); + | ^ not found in this scope + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0425`. |
