From 65a985e81e05bef484589fbb45dcee8e8048cda5 Mon Sep 17 00:00:00 2001 From: Dylan MacKenzie Date: Sun, 19 Apr 2020 16:03:35 -0700 Subject: Check for `llvm_asm` in a const context --- src/test/ui/consts/inline_asm.rs | 6 ++++++ src/test/ui/consts/inline_asm.stderr | 9 +++++++++ 2 files changed, 15 insertions(+) create mode 100644 src/test/ui/consts/inline_asm.rs create mode 100644 src/test/ui/consts/inline_asm.stderr (limited to 'src/test') diff --git a/src/test/ui/consts/inline_asm.rs b/src/test/ui/consts/inline_asm.rs new file mode 100644 index 00000000000..c2ab97e54f0 --- /dev/null +++ b/src/test/ui/consts/inline_asm.rs @@ -0,0 +1,6 @@ +#![feature(llvm_asm)] + +const _: () = unsafe { llvm_asm!("nop") }; +//~^ ERROR contains unimplemented expression type + +fn main() {} diff --git a/src/test/ui/consts/inline_asm.stderr b/src/test/ui/consts/inline_asm.stderr new file mode 100644 index 00000000000..68a78d6175f --- /dev/null +++ b/src/test/ui/consts/inline_asm.stderr @@ -0,0 +1,9 @@ +error[E0019]: constant contains unimplemented expression type + --> $DIR/inline_asm.rs:3:1 + | +LL | const _: () = unsafe { llvm_asm!("nop") }; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0019`. -- cgit 1.4.1-3-g733a5 From 79543397d70c15991dfc56fb4f89988326d4fcf3 Mon Sep 17 00:00:00 2001 From: Dylan MacKenzie Date: Sun, 19 Apr 2020 17:53:17 -0700 Subject: Bless new miri_unleashed test --- src/test/ui/consts/miri_unleashed/inline_asm.rs | 2 +- src/test/ui/consts/miri_unleashed/inline_asm.stderr | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'src/test') diff --git a/src/test/ui/consts/miri_unleashed/inline_asm.rs b/src/test/ui/consts/miri_unleashed/inline_asm.rs index f5613102562..f5be75431ba 100644 --- a/src/test/ui/consts/miri_unleashed/inline_asm.rs +++ b/src/test/ui/consts/miri_unleashed/inline_asm.rs @@ -6,7 +6,7 @@ fn main() {} // Make sure we catch executing inline assembly. -static TEST_BAD: () = { +static TEST_BAD: () = { //~ WARN: skipping const checks unsafe { llvm_asm!("xor %eax, %eax" ::: "eax"); } //~^ ERROR could not evaluate static initializer //~| NOTE in this expansion of llvm_asm! diff --git a/src/test/ui/consts/miri_unleashed/inline_asm.stderr b/src/test/ui/consts/miri_unleashed/inline_asm.stderr index 3cbdd326c82..ef11c5b1d1a 100644 --- a/src/test/ui/consts/miri_unleashed/inline_asm.stderr +++ b/src/test/ui/consts/miri_unleashed/inline_asm.stderr @@ -1,3 +1,14 @@ +warning: skipping const checks + --> $DIR/inline_asm.rs:9:1 + | +LL | / static TEST_BAD: () = { +LL | | unsafe { llvm_asm!("xor %eax, %eax" ::: "eax"); } +LL | | +LL | | +LL | | +LL | | }; + | |__^ + error[E0080]: could not evaluate static initializer --> $DIR/inline_asm.rs:10:14 | @@ -6,6 +17,6 @@ LL | unsafe { llvm_asm!("xor %eax, %eax" ::: "eax"); } | = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) -error: aborting due to previous error +error: aborting due to previous error; 1 warning emitted For more information about this error, try `rustc --explain E0080`. -- cgit 1.4.1-3-g733a5 From 152c06569b6d785cea2d408c3ebd93aaee09772d Mon Sep 17 00:00:00 2001 From: Dylan MacKenzie Date: Tue, 21 Apr 2020 09:24:41 -0700 Subject: Assign correct span to new illegal ops --- src/librustc_mir/transform/check_consts/validation.rs | 2 ++ src/test/ui/consts/inline_asm.stderr | 6 ++++-- src/test/ui/consts/miri_unleashed/inline_asm.rs | 4 +++- src/test/ui/consts/miri_unleashed/inline_asm.stderr | 13 +++++-------- 4 files changed, 14 insertions(+), 11 deletions(-) (limited to 'src/test') diff --git a/src/librustc_mir/transform/check_consts/validation.rs b/src/librustc_mir/transform/check_consts/validation.rs index b1cc7edc774..231b3be8982 100644 --- a/src/librustc_mir/transform/check_consts/validation.rs +++ b/src/librustc_mir/transform/check_consts/validation.rs @@ -485,9 +485,11 @@ impl Visitor<'tcx> for Validator<'_, 'mir, 'tcx> { | FakeReadCause::ForGuardBinding, _, ) => { + self.super_statement(statement, location); self.check_op(ops::IfOrMatch); } StatementKind::LlvmInlineAsm { .. } => { + self.super_statement(statement, location); self.check_op(ops::InlineAsm); } diff --git a/src/test/ui/consts/inline_asm.stderr b/src/test/ui/consts/inline_asm.stderr index 68a78d6175f..0a064c81366 100644 --- a/src/test/ui/consts/inline_asm.stderr +++ b/src/test/ui/consts/inline_asm.stderr @@ -1,8 +1,10 @@ error[E0019]: constant contains unimplemented expression type - --> $DIR/inline_asm.rs:3:1 + --> $DIR/inline_asm.rs:3:24 | LL | const _: () = unsafe { llvm_asm!("nop") }; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^^^ + | + = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) error: aborting due to previous error diff --git a/src/test/ui/consts/miri_unleashed/inline_asm.rs b/src/test/ui/consts/miri_unleashed/inline_asm.rs index f5be75431ba..ddc4767b83a 100644 --- a/src/test/ui/consts/miri_unleashed/inline_asm.rs +++ b/src/test/ui/consts/miri_unleashed/inline_asm.rs @@ -6,9 +6,11 @@ fn main() {} // Make sure we catch executing inline assembly. -static TEST_BAD: () = { //~ WARN: skipping const checks +static TEST_BAD: () = { unsafe { llvm_asm!("xor %eax, %eax" ::: "eax"); } //~^ ERROR could not evaluate static initializer //~| NOTE in this expansion of llvm_asm! //~| NOTE inline assembly is not supported + //~| WARN skipping const checks + //~| NOTE in this expansion of llvm_asm! }; diff --git a/src/test/ui/consts/miri_unleashed/inline_asm.stderr b/src/test/ui/consts/miri_unleashed/inline_asm.stderr index ef11c5b1d1a..444a0172621 100644 --- a/src/test/ui/consts/miri_unleashed/inline_asm.stderr +++ b/src/test/ui/consts/miri_unleashed/inline_asm.stderr @@ -1,13 +1,10 @@ warning: skipping const checks - --> $DIR/inline_asm.rs:9:1 + --> $DIR/inline_asm.rs:10:14 + | +LL | unsafe { llvm_asm!("xor %eax, %eax" ::: "eax"); } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | -LL | / static TEST_BAD: () = { -LL | | unsafe { llvm_asm!("xor %eax, %eax" ::: "eax"); } -LL | | -LL | | -LL | | -LL | | }; - | |__^ + = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) error[E0080]: could not evaluate static initializer --> $DIR/inline_asm.rs:10:14 -- cgit 1.4.1-3-g733a5