Skip to content

Commit

Permalink
Avoid using LookupResult's implicit copy ctor and assignment operator…
Browse files Browse the repository at this point in the history
… 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
  • Loading branch information
Marina Yatsina committed Mar 16, 2016
1 parent 78fc483 commit d6d8b31
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 11 deletions.
20 changes: 9 additions & 11 deletions clang/lib/Sema/SemaStmtAsm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand All @@ -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));
Expand Down
15 changes: 15 additions & 0 deletions clang/test/CodeGen/ms-inline-asm-errors.cpp
Original file line number Diff line number Diff line change
@@ -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!}}
}
}

0 comments on commit d6d8b31

Please sign in to comment.