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