forked from OSchip/llvm-project
				
			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
This commit is contained in:
		
							parent
							
								
									78fc483980
								
							
						
					
					
						commit
						d6d8b315d3
					
				| 
						 | 
					@ -623,16 +623,12 @@ bool Sema::LookupInlineAsmField(StringRef Base, StringRef Member,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!LookupName(BaseResult, getCurScope()))
 | 
					  if (!LookupName(BaseResult, getCurScope()))
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  LookupResult CurrBaseResult(BaseResult);
 | 
					  if(!BaseResult.isSingleResult())
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					  NamedDecl *FoundDecl = BaseResult.getFoundDecl();
 | 
				
			||||||
  for (StringRef NextMember : Members) {
 | 
					  for (StringRef NextMember : Members) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!CurrBaseResult.isSingleResult())
 | 
					 | 
				
			||||||
      return true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const RecordType *RT = nullptr;
 | 
					    const RecordType *RT = nullptr;
 | 
				
			||||||
    NamedDecl *FoundDecl = CurrBaseResult.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 (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(FoundDecl)) {
 | 
					    else if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(FoundDecl)) {
 | 
				
			||||||
| 
						 | 
					@ -655,13 +651,15 @@ bool Sema::LookupInlineAsmField(StringRef Base, StringRef Member,
 | 
				
			||||||
    if (!LookupQualifiedName(FieldResult, RT->getDecl()))
 | 
					    if (!LookupQualifiedName(FieldResult, RT->getDecl()))
 | 
				
			||||||
      return true;
 | 
					      return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!FieldResult.isSingleResult())
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					    FoundDecl = FieldResult.getFoundDecl();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // FIXME: Handle IndirectFieldDecl?
 | 
					    // FIXME: Handle IndirectFieldDecl?
 | 
				
			||||||
    FieldDecl *FD = dyn_cast<FieldDecl>(FieldResult.getFoundDecl());
 | 
					    FieldDecl *FD = dyn_cast<FieldDecl>(FoundDecl);
 | 
				
			||||||
    if (!FD)
 | 
					    if (!FD)
 | 
				
			||||||
      return true;
 | 
					      return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    CurrBaseResult = FieldResult;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const ASTRecordLayout &RL = Context.getASTRecordLayout(RT->getDecl());
 | 
					    const ASTRecordLayout &RL = Context.getASTRecordLayout(RT->getDecl());
 | 
				
			||||||
    unsigned i = FD->getFieldIndex();
 | 
					    unsigned i = FD->getFieldIndex();
 | 
				
			||||||
    CharUnits Result = Context.toCharUnitsFromBits(RL.getFieldOffset(i));
 | 
					    CharUnits Result = Context.toCharUnitsFromBits(RL.getFieldOffset(i));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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!}}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue