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