55 lines · cpp
1// REQUIRES: x86-registered-target2// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -fasm-blocks -verify3 4struct 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 17namespace asdf {18A a_global;19}20 21// The parser combines adjacent __asm blocks into one. Avoid that by calling22// this.23void split_inline_asm_call();24 25void test_field_lookup() {26 __asm mov eax, asdf::a_global.a3.b227 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.b233 split_inline_asm_call();34 35 // expected-error@+1 {{undeclared label}}36 __asm mov eax, asdf::a_global.a3.not_a_field37 split_inline_asm_call();38 39 __asm mov eax, A::B::kValue40 split_inline_asm_call();41 42 // expected-error@+1 {{undeclared label}}43 __asm mov eax, asdf::a_global.a3.kValue44 split_inline_asm_call();45 46 __asm mov eax, asdf :: a_global.a3.b247 split_inline_asm_call();48 49 __asm mov eax, asdf::a_global . a3 . b250 split_inline_asm_call();51 52 __asm mov eax, asdf::a_global.indirect_field53 split_inline_asm_call();54}55