Home | History | Annotate | Download | only in SemaCXX
      1 // REQUIRES: x86-registered-target
      2 // RUN: %clang_cc1 %s -triple i386-apple-darwin10 -fasm-blocks -verify
      3 
      4 struct 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 
     17 namespace asdf {
     18 A a_global;
     19 }
     20 
     21 // The parser combines adjacent __asm blocks into one. Avoid that by calling
     22 // this.
     23 void split_inline_asm_call();
     24 
     25 void test_field_lookup() {
     26   __asm mov eax, asdf::a_global.a3.b2
     27   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.b2
     33   split_inline_asm_call();
     34 
     35   // expected-error@+1 {{undeclared label}}
     36   __asm mov eax, asdf::a_global.a3.not_a_field
     37   split_inline_asm_call();
     38 
     39   __asm mov eax, A::B::kValue
     40   split_inline_asm_call();
     41 
     42   // expected-error@+1 {{undeclared label}}
     43   __asm mov eax, asdf::a_global.a3.kValue
     44   split_inline_asm_call();
     45 
     46   __asm mov eax, asdf :: a_global.a3.b2
     47   split_inline_asm_call();
     48 
     49   __asm mov eax, asdf::a_global . a3 . b2
     50   split_inline_asm_call();
     51 
     52   __asm mov eax, asdf::a_global.indirect_field
     53   split_inline_asm_call();
     54 }
     55