]> git.proxmox.com Git - rustc.git/blame - src/test/ui/inline-asm-bad-operand.rs
New upstream version 1.42.0+dfsg1
[rustc.git] / src / test / ui / inline-asm-bad-operand.rs
CommitLineData
0bf4aa26
XL
1// Test that the compiler will catch passing invalid values to inline assembly
2// operands.
3
dfeec247 4// build-fail
a1dfa0c6
XL
5// ignore-emscripten
6
0bf4aa26
XL
7#![feature(asm)]
8
9#[repr(C)]
10struct MyPtr(usize);
11
12fn main() {
13 issue_37433();
14 issue_37437();
15 issue_40187();
16 issue_54067();
a1dfa0c6 17 multiple_errors();
0bf4aa26
XL
18}
19
20fn issue_37433() {
21 unsafe {
22 asm!("" :: "r"("")); //~ ERROR E0669
23 }
24
25 unsafe {
26 let target = MyPtr(0);
27 asm!("ret" : : "{rdi}"(target)); //~ ERROR E0669
28 }
29}
30
31fn issue_37437() {
32 let hello: &str = "hello";
33 // this should fail...
34 unsafe { asm!("" :: "i"(hello)) }; //~ ERROR E0669
35 // but this should succeed.
36 unsafe { asm!("" :: "r"(hello.as_ptr())) };
37}
38
39fn issue_40187() {
40 let arr: [u8; 1] = [0; 1];
41 unsafe {
42 asm!("movups $1, %xmm0"::"m"(arr)); //~ ERROR E0669
43 }
44}
45
46fn issue_54067() {
47 let addr: Option<u32> = Some(123);
48 unsafe {
49 asm!("mov sp, $0"::"r"(addr)); //~ ERROR E0669
50 }
51}
a1dfa0c6
XL
52
53fn multiple_errors() {
54 let addr: (u32, u32) = (1, 2);
55 unsafe {
56 asm!("mov sp, $0"::"r"(addr), //~ ERROR E0669
57 "r"("hello e0669")); //~ ERROR E0669
58 }
59}