It looks like the wrong patch got committed with the original description of D14954 <http://reviews.llvm.org/D14954>. I reverted it in r254823.
Feel free to commit the header change, it looks fine. On Fri, Nov 27, 2015 at 5:57 AM, Hal Finkel via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Hi Andrey, > > This commit does not seem to match the description. What is it doing? > > Thanks again, > Hal > > ----- Original Message ----- > > From: "Andrey Bokhanko via cfe-commits" <cfe-commits@lists.llvm.org> > > To: cfe-commits@lists.llvm.org > > Sent: Friday, November 27, 2015 6:18:23 AM > > Subject: r254195 - [x86] Exclusion of incorrect include headers paths > for MCU target > > > > Author: asbokhan > > Date: Fri Nov 27 06:18:22 2015 > > New Revision: 254195 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=254195&view=rev > > Log: > > [x86] Exclusion of incorrect include headers paths for MCU target > > > > Exclusion of /usr/include and /usr/local/include headers paths for > > MCU target. > > > > Differential Revision: http://reviews.llvm.org/D14954 > > > > Modified: > > cfe/trunk/lib/CodeGen/CodeGenModule.cpp > > cfe/trunk/lib/CodeGen/CodeGenModule.h > > > > Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=254195&r1=254194&r2=254195&view=diff > > > ============================================================================== > > --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) > > +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Fri Nov 27 06:18:22 2015 > > @@ -1178,12 +1178,7 @@ void CodeGenModule::EmitDeferred() { > > // to get GlobalValue with exactly the type we need, not > > something that > > // might had been created for another decl with the same mangled > > name but > > // different type. > > - // FIXME: Support for variables is not implemented yet. > > - if (isa<FunctionDecl>(D.getDecl())) > > - GV = cast<llvm::GlobalValue>(GetAddrOfGlobal(D, > > /*IsForDefinition=*/true)); > > - else > > - if (!GV) > > - GV = GetGlobalValue(getMangledName(D)); > > + GV = cast<llvm::GlobalValue>(GetAddrOfGlobal(D, > > /*IsForDefinition=*/true)); > > > > // Check to see if we've already emitted this. This is > > necessary > > // for a couple of reasons: first, decls can end up in the > > @@ -1693,8 +1688,8 @@ CodeGenModule::GetOrCreateLLVMFunction(S > > // error. > > if (IsForDefinition && !Entry->isDeclaration()) { > > GlobalDecl OtherGD; > > - // Check that GD is not yet in ExplicitDefinitions is required > > to make > > - // sure that we issue an error only once. > > + // Check that GD is not yet in DiagnosedConflictingDefinitions > > is required > > + // to make sure that we issue an error only once. > > if (lookupRepresentativeDecl(MangledName, OtherGD) && > > (GD.getCanonicalDecl().getDecl() != > > OtherGD.getCanonicalDecl().getDecl()) && > > @@ -1904,7 +1899,8 @@ bool CodeGenModule::isTypeConstant(QualT > > llvm::Constant * > > CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName, > > llvm::PointerType *Ty, > > - const VarDecl *D) { > > + const VarDecl *D, > > + bool IsForDefinition) { > > // Lookup the entry, lazily creating it if necessary. > > llvm::GlobalValue *Entry = GetGlobalValue(MangledName); > > if (Entry) { > > @@ -1920,11 +1916,31 @@ CodeGenModule::GetOrCreateLLVMGlobal(Str > > if (Entry->getType() == Ty) > > return Entry; > > > > + // If there are two attempts to define the same mangled name, > > issue an > > + // error. > > + if (IsForDefinition && !Entry->isDeclaration()) { > > + GlobalDecl OtherGD; > > + // Check that D is not yet in DiagnosedConflictingDefinitions > > is required > > + // to make sure that we issue an error only once. > > + if (lookupRepresentativeDecl(MangledName, OtherGD) && > > + (D->getCanonicalDecl() != > > OtherGD.getCanonicalDecl().getDecl()) && > > + DiagnosedConflictingDefinitions.insert(D).second) { > > + getDiags().Report(D->getLocation(), > > + diag::err_duplicate_mangled_name); > > + getDiags().Report(OtherGD.getDecl()->getLocation(), > > + diag::note_previous_definition); > > + } > > + } > > + > > // Make sure the result is of the correct type. > > if (Entry->getType()->getAddressSpace() != > > Ty->getAddressSpace()) > > return llvm::ConstantExpr::getAddrSpaceCast(Entry, Ty); > > > > - return llvm::ConstantExpr::getBitCast(Entry, Ty); > > + // Make sure the result is of the correct type. > > + // (If global is requested for a definition, we always need to > > create a new > > + // global, not just return a bitcast.) > > + if (!IsForDefinition) > > + return llvm::ConstantExpr::getBitCast(Entry, Ty); > > } > > > > unsigned AddrSpace = GetGlobalVarAddressSpace(D, > > Ty->getAddressSpace()); > > @@ -1933,6 +1949,20 @@ CodeGenModule::GetOrCreateLLVMGlobal(Str > > llvm::GlobalValue::ExternalLinkage, nullptr, MangledName, > > nullptr, > > llvm::GlobalVariable::NotThreadLocal, AddrSpace); > > > > + // If we already created a global with the same mangled name (but > > different > > + // type) before, take its name and remove it from its parent. > > + if (Entry) { > > + GV->takeName(Entry); > > + > > + if (!Entry->use_empty()) { > > + llvm::Constant *NewPtrForOldDecl = > > + llvm::ConstantExpr::getBitCast(GV, Entry->getType()); > > + Entry->replaceAllUsesWith(NewPtrForOldDecl); > > + } > > + > > + Entry->eraseFromParent(); > > + } > > + > > // This is the first use or definition of a mangled name. If > > there is a > > // deferred decl with this name, remember that we need to emit it > > at the end > > // of the file. > > @@ -2005,7 +2035,8 @@ CodeGenModule::GetAddrOfGlobal(GlobalDec > > return GetAddrOfFunction(GD, Ty, /*ForVTable=*/false, > > /*DontDefer=*/false, > > IsForDefinition); > > } else > > - return GetAddrOfGlobalVar(cast<VarDecl>(GD.getDecl())); > > + return GetAddrOfGlobalVar(cast<VarDecl>(GD.getDecl()), > > /*Ty=*/nullptr, > > + IsForDefinition); > > } > > > > llvm::GlobalVariable * > > @@ -2055,7 +2086,8 @@ CodeGenModule::CreateOrReplaceCXXRuntime > > /// then it will be created with the specified type instead of > > whatever the > > /// normal requested type would be. > > llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D, > > - llvm::Type *Ty) { > > + llvm::Type *Ty, > > + bool > > IsForDefinition) { > > assert(D->hasGlobalStorage() && "Not a global variable"); > > QualType ASTTy = D->getType(); > > if (!Ty) > > @@ -2065,7 +2097,7 @@ llvm::Constant *CodeGenModule::GetAddrOf > > llvm::PointerType::get(Ty, > > getContext().getTargetAddressSpace(ASTTy)); > > > > StringRef MangledName = getMangledName(D); > > - return GetOrCreateLLVMGlobal(MangledName, PTy, D); > > + return GetOrCreateLLVMGlobal(MangledName, PTy, D, > > IsForDefinition); > > } > > > > /// CreateRuntimeVariable - Create a new runtime global variable > > with the > > @@ -2091,7 +2123,7 @@ void CodeGenModule::EmitTentativeDefinit > > } > > > > // The tentative definition is the only definition. > > - EmitGlobalVarDefinition(D); > > + EmitGlobalVarDefinition(D, true); > > } > > > > CharUnits CodeGenModule::GetTargetTypeStoreSize(llvm::Type *Ty) > > const { > > @@ -2178,7 +2210,8 @@ void CodeGenModule::maybeSetTrivialComda > > GO.setComdat(TheModule.getOrInsertComdat(GO.getName())); > > } > > > > -void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) { > > +void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D, > > + bool IsTentative) { > > llvm::Constant *Init = nullptr; > > QualType ASTTy = D->getType(); > > CXXRecordDecl *RD = > > ASTTy->getBaseElementTypeUnsafe()->getAsCXXRecordDecl(); > > @@ -2237,7 +2270,8 @@ void CodeGenModule::EmitGlobalVarDefinit > > } > > > > llvm::Type* InitType = Init->getType(); > > - llvm::Constant *Entry = GetAddrOfGlobalVar(D, InitType); > > + llvm::Constant *Entry = > > + GetAddrOfGlobalVar(D, InitType, > > /*IsForDefinition=*/!IsTentative); > > > > // Strip off a bitcast if we got one back. > > if (auto *CE = dyn_cast<llvm::ConstantExpr>(Entry)) { > > @@ -2269,7 +2303,8 @@ void CodeGenModule::EmitGlobalVarDefinit > > Entry->setName(StringRef()); > > > > // Make a new global with the correct type, this is now > > guaranteed to work. > > - GV = cast<llvm::GlobalVariable>(GetAddrOfGlobalVar(D, > > InitType)); > > + GV = cast<llvm::GlobalVariable>( > > + GetAddrOfGlobalVar(D, InitType, > > /*IsForDefinition=*/!IsTentative)); > > > > // Replace all uses of the old global with the new global > > llvm::Constant *NewPtrForOldDecl = > > > > Modified: cfe/trunk/lib/CodeGen/CodeGenModule.h > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.h?rev=254195&r1=254194&r2=254195&view=diff > > > ============================================================================== > > --- cfe/trunk/lib/CodeGen/CodeGenModule.h (original) > > +++ cfe/trunk/lib/CodeGen/CodeGenModule.h Fri Nov 27 06:18:22 2015 > > @@ -701,7 +701,8 @@ public: > > /// with the specified type instead of whatever the normal > > requested type > > /// would be. > > llvm::Constant *GetAddrOfGlobalVar(const VarDecl *D, > > - llvm::Type *Ty = nullptr); > > + llvm::Type *Ty = nullptr, > > + bool IsForDefinition = false); > > > > /// Return the address of the given function. If Ty is non-null, > > then this > > /// function will use the specified type if it has to create it. > > @@ -1130,7 +1131,8 @@ private: > > > > llvm::Constant *GetOrCreateLLVMGlobal(StringRef MangledName, > > llvm::PointerType *PTy, > > - const VarDecl *D); > > + const VarDecl *D, > > + bool IsForDefinition = > > false); > > > > void setNonAliasAttributes(const Decl *D, llvm::GlobalObject *GO); > > > > @@ -1141,7 +1143,7 @@ private: > > void EmitGlobalDefinition(GlobalDecl D, llvm::GlobalValue *GV = > > nullptr); > > > > void EmitGlobalFunctionDefinition(GlobalDecl GD, llvm::GlobalValue > > *GV); > > - void EmitGlobalVarDefinition(const VarDecl *D); > > + void EmitGlobalVarDefinition(const VarDecl *D, bool IsTentative = > > false); > > void EmitAliasDefinition(GlobalDecl GD); > > void EmitObjCPropertyImplementations(const ObjCImplementationDecl > > *D); > > void EmitObjCIvarInitializations(ObjCImplementationDecl *D); > > > > > > _______________________________________________ > > cfe-commits mailing list > > cfe-commits@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > > > -- > Hal Finkel > Assistant Computational Scientist > Leadership Computing Facility > Argonne National Laboratory > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits