]> git.lizzy.rs Git - rust.git/blob - src/test/ui/asm/srcloc.rs
asm: Allow multiple template strings; interpret them as newline-separated
[rust.git] / src / test / ui / asm / srcloc.rs
1 // no-system-llvm
2 // only-x86_64
3 // build-fail
4
5 #![feature(asm)]
6
7 // Checks that inline asm errors are mapped to the correct line in the source code.
8
9 fn main() {
10     unsafe {
11         asm!("invalid_instruction");
12         //~^ ERROR: invalid instruction mnemonic 'invalid_instruction'
13
14         asm!("
15             invalid_instruction
16         ");
17         //~^^ ERROR: invalid instruction mnemonic 'invalid_instruction'
18
19         asm!(r#"
20             invalid_instruction
21         "#);
22         //~^^ ERROR: invalid instruction mnemonic 'invalid_instruction'
23
24         asm!("
25             mov eax, eax
26             invalid_instruction
27             mov eax, eax
28         ");
29         //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'
30
31         asm!(r#"
32             mov eax, eax
33             invalid_instruction
34             mov eax, eax
35         "#);
36         //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'
37
38         asm!(concat!("invalid", "_", "instruction"));
39         //~^ ERROR: invalid instruction mnemonic 'invalid_instruction'
40
41         asm!("movaps %xmm3, (%esi, 2)", options(att_syntax));
42         //~^ WARN: scale factor without index register is ignored
43
44         asm!(
45             "invalid_instruction",
46         );
47         //~^^ ERROR: invalid instruction mnemonic 'invalid_instruction'
48
49         asm!(
50             "mov eax, eax",
51             "invalid_instruction",
52             "mov eax, eax",
53         );
54         //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'
55
56         asm!(
57             "mov eax, eax\n",
58             "invalid_instruction",
59             "mov eax, eax",
60         );
61         //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'
62
63         asm!(
64             "mov eax, eax",
65             concat!("invalid", "_", "instruction"),
66             "mov eax, eax",
67         );
68         //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'
69
70         asm!(
71             concat!("mov eax", ", ", "eax"),
72             concat!("invalid", "_", "instruction"),
73             concat!("mov eax", ", ", "eax"),
74         );
75         //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'
76
77         // Make sure template strings get separated
78         asm!(
79             "invalid_instruction1",
80             "invalid_instruction2",
81         );
82         //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction1'
83         //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction2'
84
85         asm!(
86             concat!(
87                 "invalid", "_", "instruction1", "\n",
88                 "invalid", "_", "instruction2",
89             ),
90         );
91         //~^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction1'
92         //~^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction2'
93
94         asm!(
95             concat!(
96                 "invalid", "_", "instruction1", "\n",
97                 "invalid", "_", "instruction2",
98             ),
99             concat!(
100                 "invalid", "_", "instruction3", "\n",
101                 "invalid", "_", "instruction4",
102             ),
103         );
104         //~^^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction1'
105         //~^^^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction2'
106         //~^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction3'
107         //~^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction4'
108
109         asm!(
110             concat!(
111                 "invalid", "_", "instruction1", "\n",
112                 "invalid", "_", "instruction2", "\n",
113             ),
114             concat!(
115                 "invalid", "_", "instruction3", "\n",
116                 "invalid", "_", "instruction4", "\n",
117             ),
118         );
119         //~^^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction1'
120         //~^^^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction2'
121         //~^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction3'
122         //~^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction4'
123     }
124 }