<div dir="ltr"><div>Hi all,</div><div>  I have a static library with object files with the same name (not the same full path, but the archive made with llvm-ar does not store the full path). The library contains object files that have been compiled with `-flto=thin` (compiled with LDC, not clang, but that shouldn't matter).</div><div>When linking to that static library, I get the error:</div><div>Assertion failed: (ModuleMap.find(ModuleBuffer.getBufferIdentifier()) == ModuleMap.end() && "Expect unique Buffer Identifier"), function generateModuleMap, file ../lib/LTO/ThinLTOCodeGenerator.cpp, line 138.</div><div><br></div><div>The error occurs because the buffer identifier uses the filename of the objects inside the archive, and those are identical for the two files with different source path.</div><div><br></div><div>This problem appears to be fixed for LLD here:</div><div><a href="https://reviews.llvm.org/D25495">https://reviews.llvm.org/D25495</a></div><div><a href="https://bugs.llvm.org/show_bug.cgi?id=30665">https://bugs.llvm.org/show_bug.cgi?id=30665</a></div><div><br></div><div>But it persists for linking with the system linker on OSX (while manually passing libLTO.dylib to the linker).</div><div><br></div><div>If I modify lib/LTO/ThinLTOCodeGenerator.cpp to do a poor-man's uniquefying of the buffer identifier:</div><div>```</div><div>void ThinLTOCodeGenerator::addModule(StringRef Identifier, StringRef Data) {</div><div>-  ThinLTOBuffer Buffer(Data, Identifier.str()));</div><div>+  ThinLTOBuffer Buffer(Data, Identifier.str() + utostr(Data.size()));</div><div>```</div><div>then the problem is solved.</div><div><br></div><div>What would be a proper way to fix this issue?</div><div>Can it be fixed in lib/LTO, or should I not create an (afaict valid) archive containing duplicate object file names?</div><div><br></div><div>(Note: this issue makes it impossible to use an LTO version of the standard library with LDC)</div><div><br></div><div>Thanks,</div><div>  Johan</div><div><br></div></div>