未验证 提交 db712483 编写于 作者: M Matthias Krüger 提交者: GitHub

Rollup merge of #93868 - Amanieu:asm_reg_conflict, r=cjgillot

Fix incorrect register conflict detection in asm!

This would previously incorrectly reject two subregisters that were
distinct but part of the same larger register, for example `al` and
`ah`.
......@@ -373,7 +373,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
err.emit();
}
Entry::Vacant(v) => {
v.insert(idx);
if r == reg {
v.insert(idx);
}
}
}
};
......
// compile-flags: --target armv7-unknown-linux-gnueabihf
// needs-llvm-components: arm
#![feature(no_core, lang_items, rustc_attrs)]
#![no_core]
#[rustc_builtin_macro]
macro_rules! asm {
() => {};
}
#[lang = "sized"]
trait Sized {}
fn main() {
unsafe {
asm!("", out("d0") _, out("d1") _);
asm!("", out("d0") _, out("s1") _);
//~^ ERROR register `s1` conflicts with register `d0`
}
}
error: register `s1` conflicts with register `d0`
--> $DIR/reg-conflict.rs:17:31
|
LL | asm!("", out("d0") _, out("s1") _);
| ----------- ^^^^^^^^^^^ register `s1`
| |
| register `d0`
error: aborting due to previous error
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册