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();
|
NamedDecl *FoundDecl = BaseResult.getFoundDecl();
|
||||||
if (VarDecl *VD = dyn_cast<VarDecl>(FoundDecl))
|
if (VarDecl *VD = dyn_cast<VarDecl>(FoundDecl))
|
||||||
RT = VD->getType()->getAs<RecordType>();
|
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>();
|
RT = TD->getUnderlyingType()->getAs<RecordType>();
|
||||||
|
else if (TypeDecl *TD = dyn_cast<TypeDecl>(FoundDecl))
|
||||||
|
RT = TD->getTypeForDecl()->getAs<RecordType>();
|
||||||
if (!RT)
|
if (!RT)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// REQUIRES: x86-registered-target
|
// 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
|
// rdar://13645930
|
||||||
|
|
||||||
|
@ -111,3 +111,33 @@ void test6() {
|
||||||
jmp a
|
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