55 lines
1.1 KiB
C++
55 lines
1.1 KiB
C++
|
// REQUIRES: x86-registered-target
|
||
|
// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -fasm-blocks -verify
|
||
|
|
||
|
struct A {
|
||
|
int a1;
|
||
|
int a2;
|
||
|
struct B {
|
||
|
int b1;
|
||
|
int b2;
|
||
|
enum { kValue = 42 };
|
||
|
} a3;
|
||
|
struct {
|
||
|
int indirect_field;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
namespace asdf {
|
||
|
A a_global;
|
||
|
}
|
||
|
|
||
|
// The parser combines adjacent __asm blocks into one. Avoid that by calling
|
||
|
// this.
|
||
|
void split_inline_asm_call();
|
||
|
|
||
|
void test_field_lookup() {
|
||
|
__asm mov eax, asdf::a_global.a3.b2
|
||
|
split_inline_asm_call();
|
||
|
|
||
|
// FIXME: These diagnostics are crap.
|
||
|
|
||
|
// expected-error@+1 {{undeclared label}}
|
||
|
__asm mov eax, asdf::a_global.not_a_field.b2
|
||
|
split_inline_asm_call();
|
||
|
|
||
|
// expected-error@+1 {{undeclared label}}
|
||
|
__asm mov eax, asdf::a_global.a3.not_a_field
|
||
|
split_inline_asm_call();
|
||
|
|
||
|
__asm mov eax, A::B::kValue
|
||
|
split_inline_asm_call();
|
||
|
|
||
|
// expected-error@+1 {{undeclared label}}
|
||
|
__asm mov eax, asdf::a_global.a3.kValue
|
||
|
split_inline_asm_call();
|
||
|
|
||
|
__asm mov eax, asdf :: a_global.a3.b2
|
||
|
split_inline_asm_call();
|
||
|
|
||
|
__asm mov eax, asdf::a_global . a3 . b2
|
||
|
split_inline_asm_call();
|
||
|
|
||
|
__asm mov eax, asdf::a_global.indirect_field
|
||
|
split_inline_asm_call();
|
||
|
}
|