Index: lld/trunk/test/COFF/pdb-same-name.test =================================================================== --- lld/trunk/test/COFF/pdb-same-name.test +++ lld/trunk/test/COFF/pdb-same-name.test @@ -0,0 +1,23 @@ +# RUN: rm -rf %t1 %t2 +# RUN: mkdir %t1 %t2 +# RUN: yaml2obj < %p/Inputs/pdb1.yaml > %t1/foo.obj +# RUN: llvm-ar cru %t1/foo.lib %t1/foo.obj +# RUN: yaml2obj < %p/Inputs/pdb2.yaml > %t2/foo.obj +# RUN: llvm-ar cru %t2/foo.lib %t2/foo.obj + +# RUN: rm -f %t.dll %t.pdb +# RUN: lld-link /debug /pdb:%t.pdb /dll /out:%t.dll /entry:main /nodefaultlib \ +# RUN: %t1/foo.lib %t2/foo.lib + +# RUN: llvm-pdbutil dump -modules %t.pdb | FileCheck -check-prefix RAW %s + +RAW: Modules +RAW-NEXT: ============================================================ +RAW-NEXT: Mod 0000 | `foo.obj`: +RAW-NEXT: Obj: `{{.*}}1\foo.lib`: +RAW-NEXT: debug stream: 9, # files: 1, has ec info: false +RAW-NEXT: pdb file ni: 0 ``, src file ni: 0 `` +RAW-NEXT: Mod 0001 | `foo.obj`: +RAW-NEXT: Obj: `{{.*}}2\foo.lib`: +RAW-NEXT: debug stream: 10, # files: 1, has ec info: false +RAW-NEXT: pdb file ni: 0 ``, src file ni: 0 `` Index: llvm/trunk/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h =================================================================== --- llvm/trunk/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h +++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h @@ -64,7 +64,6 @@ void setSymbolRecordStreamIndex(uint32_t Index); Expected addModuleInfo(StringRef ModuleName); - Error addModuleSourceFile(StringRef Module, StringRef File); Error addModuleSourceFile(DbiModuleDescriptorBuilder &Module, StringRef File); Expected getSourceFileNameIndex(StringRef FileName); @@ -113,8 +112,7 @@ const DbiStreamHeader *Header; - StringMap> ModiMap; - std::vector ModiList; + std::vector> ModiList; StringMap SourceFileNames; Index: llvm/trunk/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp =================================================================== --- llvm/trunk/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp +++ llvm/trunk/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp @@ -90,24 +90,9 @@ Expected DbiStreamBuilder::addModuleInfo(StringRef ModuleName) { uint32_t Index = ModiList.size(); - auto MIB = - llvm::make_unique(ModuleName, Index, Msf); - auto M = MIB.get(); - auto Result = ModiMap.insert(std::make_pair(ModuleName, std::move(MIB))); - - if (!Result.second) - return make_error(raw_error_code::duplicate_entry, - "The specified module already exists"); - ModiList.push_back(M); - return *M; -} - -Error DbiStreamBuilder::addModuleSourceFile(StringRef Module, StringRef File) { - auto ModIter = ModiMap.find(Module); - if (ModIter == ModiMap.end()) - return make_error(raw_error_code::no_entry, - "The specified module was not found"); - return addModuleSourceFile(*ModIter->second, File); + ModiList.push_back( + llvm::make_unique(ModuleName, Index, Msf)); + return *ModiList.back(); } Error DbiStreamBuilder::addModuleSourceFile(DbiModuleDescriptorBuilder &Module, Index: llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp =================================================================== --- llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp +++ llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp @@ -704,7 +704,7 @@ ModiBuilder.setObjFileName(MI.Obj); for (auto S : MI.SourceFiles) - ExitOnErr(DbiBuilder.addModuleSourceFile(MI.Mod, S)); + ExitOnErr(DbiBuilder.addModuleSourceFile(ModiBuilder, S)); if (MI.Modi.hasValue()) { const auto &ModiStream = *MI.Modi; for (auto Symbol : ModiStream.Symbols) {