1 | // REQUIRES: x86-registered-target |
2 | // RUN: %clang_cc1 %s -triple i386-apple-darwin10 -fasm-blocks -verify |
3 | |
4 | struct A { |
5 | int a1; |
6 | int a2; |
7 | struct B { |
8 | int b1; |
9 | int b2; |
10 | enum { kValue = 42 }; |
11 | } a3; |
12 | struct { |
13 | int indirect_field; |
14 | }; |
15 | }; |
16 | |
17 | namespace asdf { |
18 | A a_global; |
19 | } |
20 | |
21 | // The parser combines adjacent __asm blocks into one. Avoid that by calling |
22 | // this. |
23 | void split_inline_asm_call(); |
24 | |
25 | void test_field_lookup() { |
26 | __asm mov eax, asdf::a_global.a3.b2 |
27 | split_inline_asm_call(); |
28 | |
29 | // FIXME: These diagnostics are crap. |
30 | |
31 | // expected-error@+1 {{undeclared label}} |
32 | __asm mov eax, asdf::a_global.not_a_field.b2 |
33 | split_inline_asm_call(); |
34 | |
35 | // expected-error@+1 {{undeclared label}} |
36 | __asm mov eax, asdf::a_global.a3.not_a_field |
37 | split_inline_asm_call(); |
38 | |
39 | __asm mov eax, A::B::kValue |
40 | split_inline_asm_call(); |
41 | |
42 | // expected-error@+1 {{undeclared label}} |
43 | __asm mov eax, asdf::a_global.a3.kValue |
44 | split_inline_asm_call(); |
45 | |
46 | __asm mov eax, asdf :: a_global.a3.b2 |
47 | split_inline_asm_call(); |
48 | |
49 | __asm mov eax, asdf::a_global . a3 . b2 |
50 | split_inline_asm_call(); |
51 | |
52 | __asm mov eax, asdf::a_global.indirect_field |
53 | split_inline_asm_call(); |
54 | } |
55 | |