187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// REQUIRES: x86-registered-target 287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -fasm-blocks -verify 387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarstruct A { 587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar int a1; 687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar int a2; 787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar struct B { 887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar int b1; 987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar int b2; 1087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar enum { kValue = 42 }; 1187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar } a3; 1287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar struct { 1387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar int indirect_field; 1487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar }; 1587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}; 1687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 1787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarnamespace asdf { 1887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarA a_global; 1987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 2087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 2187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// The parser combines adjacent __asm blocks into one. Avoid that by calling 2287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// this. 2387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarvoid split_inline_asm_call(); 2487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 2587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarvoid test_field_lookup() { 2687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar __asm mov eax, asdf::a_global.a3.b2 2787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar split_inline_asm_call(); 2887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 2987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // FIXME: These diagnostics are crap. 3087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 3187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // expected-error@+1 {{undeclared label}} 3287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar __asm mov eax, asdf::a_global.not_a_field.b2 3387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar split_inline_asm_call(); 3487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 3587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // expected-error@+1 {{undeclared label}} 3687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar __asm mov eax, asdf::a_global.a3.not_a_field 3787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar split_inline_asm_call(); 3887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 3987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar __asm mov eax, A::B::kValue 4087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar split_inline_asm_call(); 4187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 4287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // expected-error@+1 {{undeclared label}} 4387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar __asm mov eax, asdf::a_global.a3.kValue 4487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar split_inline_asm_call(); 4587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 4687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar __asm mov eax, asdf :: a_global.a3.b2 4787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar split_inline_asm_call(); 4887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 4987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar __asm mov eax, asdf::a_global . a3 . b2 5087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar split_inline_asm_call(); 5187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 5287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar __asm mov eax, asdf::a_global.indirect_field 5387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar split_inline_asm_call(); 5487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 55