forked from OSchip/llvm-project
Support field references to struct names and c++11 aliases from inline asm.
This is in addition to the existing support for typedefs. llvm-svn: 208053
This commit is contained in:
parent
bdc4f12f19
commit
9ef9ca470f
|
@ -441,8 +441,10 @@ bool Sema::LookupInlineAsmField(StringRef Base, StringRef Member,
|
|||
NamedDecl *FoundDecl = BaseResult.getFoundDecl();
|
||||
if (VarDecl *VD = dyn_cast<VarDecl>(FoundDecl))
|
||||
RT = VD->getType()->getAs<RecordType>();
|
||||
else if (TypedefDecl *TD = dyn_cast<TypedefDecl>(FoundDecl))
|
||||
else if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(FoundDecl))
|
||||
RT = TD->getUnderlyingType()->getAs<RecordType>();
|
||||
else if (TypeDecl *TD = dyn_cast<TypeDecl>(FoundDecl))
|
||||
RT = TD->getTypeForDecl()->getAs<RecordType>();
|
||||
if (!RT)
|
||||
return true;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// REQUIRES: x86-registered-target
|
||||
// RUN: %clang_cc1 -x c++ %s -triple i386-apple-darwin10 -fasm-blocks -emit-llvm -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -x c++ %s -triple i386-apple-darwin10 -fasm-blocks -emit-llvm -o - -std=c++11 | FileCheck %s
|
||||
|
||||
// rdar://13645930
|
||||
|
||||
|
@ -111,3 +111,33 @@ void test6() {
|
|||
jmp a
|
||||
}
|
||||
}
|
||||
|
||||
void t7_struct() {
|
||||
struct A {
|
||||
int a;
|
||||
int b;
|
||||
};
|
||||
__asm mov eax, [eax].A.b
|
||||
// CHECK-LABEL: define void @_Z9t7_structv
|
||||
// CHECK: call void asm sideeffect inteldialect "mov eax, [eax].4", "~{eax},~{dirflag},~{fpsr},~{flags}"()
|
||||
}
|
||||
|
||||
void t7_typedef() {
|
||||
typedef struct {
|
||||
int a;
|
||||
int b;
|
||||
} A;
|
||||
__asm mov eax, [eax].A.b
|
||||
// CHECK-LABEL: define void @_Z10t7_typedefv
|
||||
// CHECK: call void asm sideeffect inteldialect "mov eax, [eax].4", "~{eax},~{dirflag},~{fpsr},~{flags}"()
|
||||
}
|
||||
|
||||
void t7_using() {
|
||||
using A = struct {
|
||||
int a;
|
||||
int b;
|
||||
};
|
||||
__asm mov eax, [eax].A.b
|
||||
// CHECK-LABEL: define void @_Z8t7_usingv
|
||||
// CHECK: call void asm sideeffect inteldialect "mov eax, [eax].4", "~{eax},~{dirflag},~{fpsr},~{flags}"()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue