| // REQUIRES: x86-registered-target |
| // RUN: %clang_cc1 %s -triple i386-apple-darwin10 -fasm-blocks -verify |
| |
| struct A { |
| int a1; |
| int a2; |
| struct B { |
| int b1; |
| int b2; |
| enum { kValue = 42 }; |
| } a3; |
| struct { |
| int indirect_field; |
| }; |
| }; |
| |
| namespace asdf { |
| A a_global; |
| } |
| |
| // The parser combines adjacent __asm blocks into one. Avoid that by calling |
| // this. |
| void split_inline_asm_call(); |
| |
| void test_field_lookup() { |
| __asm mov eax, asdf::a_global.a3.b2 |
| split_inline_asm_call(); |
| |
| // FIXME: These diagnostics are crap. |
| |
| // expected-error@+1 {{undeclared label}} |
| __asm mov eax, asdf::a_global.not_a_field.b2 |
| split_inline_asm_call(); |
| |
| // expected-error@+1 {{undeclared label}} |
| __asm mov eax, asdf::a_global.a3.not_a_field |
| split_inline_asm_call(); |
| |
| __asm mov eax, A::B::kValue |
| split_inline_asm_call(); |
| |
| // expected-error@+1 {{undeclared label}} |
| __asm mov eax, asdf::a_global.a3.kValue |
| split_inline_asm_call(); |
| |
| __asm mov eax, asdf :: a_global.a3.b2 |
| split_inline_asm_call(); |
| |
| __asm mov eax, asdf::a_global . a3 . b2 |
| split_inline_asm_call(); |
| |
| __asm mov eax, asdf::a_global.indirect_field |
| split_inline_asm_call(); |
| } |