On Mon, Apr 8, 2013 at 10:42 AM, John McCall <[email protected]> wrote:
> > On Apr 6, 2013, at 12:07 AM, Richard Smith <[email protected]> > wrote: > > > Author: rsmith > > Date: Sat Apr 6 02:07:44 2013 > > New Revision: 178952 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=178952&view=rev > > Log: > > Remove nondeterminism introduced in r178950. > > > > 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=178952&r1=178951&r2=178952&view=diff > > > ============================================================================== > > --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) > > +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Sat Apr 6 02:07:44 2013 > > @@ -1732,13 +1732,15 @@ void CodeGenModule::MaybeHandleStaticInE > > // OK, this is an internal linkage entity inside an extern "C" linkage > > // specification. Make a note of that so we can give it the "expected" > > // mangled name if nothing else is using that name. > > - StaticExternCMap::iterator I = > > - StaticExternCValues.insert(std::make_pair(D->getIdentifier(), > GV)).first; > > + std::pair<StaticExternCMap::iterator, bool> R = > > + StaticExternCValues.insert(std::make_pair(D->getIdentifier(), > GV)); > > > > // If we have multiple internal linkage entities with the same name > > // in extern "C" regions, none of them gets that name. > > - if (I->second != GV) > > - I->second = 0; > > + if (!R.second) > > + R.first->second = 0; > > + else > > + StaticExternCIdents.push_back(D->getIdentifier()); > > } > > > > void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) { > > @@ -2947,13 +2949,13 @@ static void EmitGlobalDeclMetadata(CodeG > > /// to such functions with an unmangled name from inline assembly within > the > > /// same translation unit. > > void CodeGenModule::EmitStaticExternCAliases() { > > - for (StaticExternCMap::iterator I = StaticExternCValues.begin(), > > - E = StaticExternCValues.end(); > > - I != E; ++I) > > - if (I->second && !getModule().getNamedValue(I->first->getName())) > > - AddUsedGlobal( > > - new llvm::GlobalAlias(I->second->getType(), > I->second->getLinkage(), > > - I->first->getName(), I->second, > &getModule())); > > + for (unsigned I = 0, N = StaticExternCIdents.size(); I != N; ++I) { > > + IdentifierInfo *Name = StaticExternCIdents[I]; > > + llvm::GlobalValue *Val = StaticExternCValues[Name]; > > + if (Val && !getModule().getNamedValue(Name->getName())) > > + AddUsedGlobal(new llvm::GlobalAlias(Val->getType(), > Val->getLinkage(), > > + Name->getName(), Val, > &getModule())); > > + } > > } > > > > /// Emits metadata nodes associating all the global values in the > > > > Modified: cfe/trunk/lib/CodeGen/CodeGenModule.h > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.h?rev=178952&r1=178951&r2=178952&view=diff > > > ============================================================================== > > --- cfe/trunk/lib/CodeGen/CodeGenModule.h (original) > > +++ cfe/trunk/lib/CodeGen/CodeGenModule.h Sat Apr 6 02:07:44 2013 > > @@ -310,6 +310,7 @@ class CodeGenModule : public CodeGenType > > typedef llvm::DenseMap<IdentifierInfo *, > > llvm::GlobalValue *> StaticExternCMap; > > StaticExternCMap StaticExternCValues; > > + std::vector<IdentifierInfo*> StaticExternCIdents; > > I think this is just llvm::MapVector<IdentifierInfo*, llvm::GlobalValue*>. > Huh, I somehow didn't find that despite looking for it. r179438, thanks!
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
