summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarina Yatsina <marina.yatsina@intel.com>2016-03-16 09:56:58 +0000
committerMarina Yatsina <marina.yatsina@intel.com>2016-03-16 09:56:58 +0000
commitd6d8b315d394fff2d0a1dba42c0f196e62c99a23 (patch)
treee2ed6737f667244e6f71821b9bcc7a745e28c760
parent78fc4839808b432ac174b36204038bff63a986ef (diff)
downloadbcm5719-llvm-d6d8b315d394fff2d0a1dba42c0f196e62c99a23.tar.gz
bcm5719-llvm-d6d8b315d394fff2d0a1dba42c0f196e62c99a23.zip
Avoid using LookupResult's implicit copy ctor and assignment operator to avoid warnings
The purpose of this patch is to keep the same functionality without using LookupResult's implicit copy ctor and assignment operator, because they cause warnings when -Wdeprecated is passed. This patch is meant to help the following review: http://reviews.llvm.org/D18123. The functionality is covered by the tests in my original commit (255890) The test case in this patch was added to test a bug caught in the review of the first version of this fix. Differential Revision: http://reviews.llvm.org/D18175 llvm-svn: 263630
-rw-r--r--clang/lib/Sema/SemaStmtAsm.cpp20
-rw-r--r--clang/test/CodeGen/ms-inline-asm-errors.cpp15
2 files changed, 24 insertions, 11 deletions
diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp
index 11a4f8bfa85..cd4269cd7ea 100644
--- a/clang/lib/Sema/SemaStmtAsm.cpp
+++ b/clang/lib/Sema/SemaStmtAsm.cpp
@@ -623,16 +623,12 @@ bool Sema::LookupInlineAsmField(StringRef Base, StringRef Member,
if (!LookupName(BaseResult, getCurScope()))
return true;
-
- LookupResult CurrBaseResult(BaseResult);
-
+
+ if(!BaseResult.isSingleResult())
+ return true;
+ NamedDecl *FoundDecl = BaseResult.getFoundDecl();
for (StringRef NextMember : Members) {
-
- if (!CurrBaseResult.isSingleResult())
- return true;
-
const RecordType *RT = nullptr;
- NamedDecl *FoundDecl = CurrBaseResult.getFoundDecl();
if (VarDecl *VD = dyn_cast<VarDecl>(FoundDecl))
RT = VD->getType()->getAs<RecordType>();
else if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(FoundDecl)) {
@@ -655,13 +651,15 @@ bool Sema::LookupInlineAsmField(StringRef Base, StringRef Member,
if (!LookupQualifiedName(FieldResult, RT->getDecl()))
return true;
+ if (!FieldResult.isSingleResult())
+ return true;
+ FoundDecl = FieldResult.getFoundDecl();
+
// FIXME: Handle IndirectFieldDecl?
- FieldDecl *FD = dyn_cast<FieldDecl>(FieldResult.getFoundDecl());
+ FieldDecl *FD = dyn_cast<FieldDecl>(FoundDecl);
if (!FD)
return true;
- CurrBaseResult = FieldResult;
-
const ASTRecordLayout &RL = Context.getASTRecordLayout(RT->getDecl());
unsigned i = FD->getFieldIndex();
CharUnits Result = Context.toCharUnitsFromBits(RL.getFieldOffset(i));
diff --git a/clang/test/CodeGen/ms-inline-asm-errors.cpp b/clang/test/CodeGen/ms-inline-asm-errors.cpp
new file mode 100644
index 00000000000..6484743e1f7
--- /dev/null
+++ b/clang/test/CodeGen/ms-inline-asm-errors.cpp
@@ -0,0 +1,15 @@
+// REQUIRES: x86-registered-target
+// RUN: %clang_cc1 -x c++ %s -triple i386-apple-darwin10 -std=c++11 -fasm-blocks -verify
+
+class A {
+public:
+ void foo(int a) {}
+ void foo(float a) {}
+};
+
+
+void t_fail() {
+ __asm {
+ mov ecx, [eax]A.foo // expected-error {{Unable to lookup field reference!}}
+ }
+}
OpenPOWER on IntegriCloud