[llvm-bugs] [Bug 26037] New: LTO crashes after the linker ignores (r256003) not-imported DISubprograms that are otherwise used as a DIImportedEntity's entity.

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Jan 5 16:16:08 PST 2016


https://llvm.org/bugs/show_bug.cgi?id=26037

            Bug ID: 26037
           Summary: LTO crashes after the linker ignores (r256003)
                    not-imported DISubprograms that are otherwise used as
                    a DIImportedEntity's entity.
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Linker
          Assignee: unassignedbugs at nondot.org
          Reporter: ahmed.bougacha at gmail.com
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

Since r256003, OSX bootstraps (e.g.,
http://lab.llvm.org:8080/green/job/llvm-stage2-cmake-RgLTO/) have been crashing
with assertion failures. I think the issue is reducible to:

 $ cat a.cpp
namespace A { void a(); }
using A::a;

 $ cat main.cpp
int main() { return 0; }

 $ clang++ -flto -g3 a.cpp main.cpp
clang-3.8: error: unable to execute command: Segmentation fault: 11
clang-3.8: error: linker command failed due to signal (use -v to see
invocation)


Here, the `using' translates into a DIImportedEntity, which references an
otherwise not-imported DISubprogram, "A::a". findNeededSubprograms, introduced
by r256003, only looks at explicitly imported subprograms, which causes this
one to not be linked in.



Here's some more relevant details:

The failure is:

  Assertion failed: (Val && "isa<> used on a null pointer"), function doit,
file
/Users/buildslave/jenkins/sharedspace/phase1 at 2/llvm/include/llvm/Support/Casting.h,
line 95.

In:

    frame #3: 0x00000001034e0ad1 libLTO.dylib`__assert_rtn + 81
    frame #4: 0x0000000103511313
libLTO.dylib`llvm::DwarfCompileUnit::constructImportedEntityDIE(llvm::DIImportedEntity
const*) + 1075
    frame #5: 0x000000010351678e
libLTO.dylib`llvm::DwarfDebug::constructAndAddImportedEntityDIE(llvm::DwarfCompileUnit&,
llvm::DIImportedEntity const*) + 94
    frame #6: 0x0000000103515105 libLTO.dylib`llvm::DwarfDebug::beginModule() +
1333
    frame #7: 0x0000000103514b63
libLTO.dylib`llvm::DwarfDebug::DwarfDebug(llvm::AsmPrinter*, llvm::Module*) +
2275
    frame #8: 0x00000001034f0f68
libLTO.dylib`llvm::AsmPrinter::doInitialization(llvm::Module&) + 1496
    frame #9: 0x00000001033c513b
libLTO.dylib`llvm::FPPassManager::doInitialization(llvm::Module&) + 75
    frame #10: 0x00000001033c5560
libLTO.dylib`llvm::legacy::PassManagerImpl::run(llvm::Module&) + 816
    frame #11: 0x00000001038db37b libLTO.dylib`codegen(llvm::Module*,
llvm::raw_pwrite_stream&, llvm::Target const*, llvm::StringRef,
llvm::StringRef, llvm::TargetOptions const&, llvm::Reloc::Model,
llvm::CodeModel::Model, llvm::CodeGenOpt::Level,
llvm::TargetMachine::CodeGenFileType) + 315
    frame #12: 0x00000001038db043
libLTO.dylib`llvm::splitCodeGen(std::__1::unique_ptr<llvm::Module,
std::__1::default_delete<llvm::Module> >,
llvm::ArrayRef<llvm::raw_pwrite_stream*>, llvm::StringRef, llvm::StringRef,
llvm::TargetOptions const&, llvm::Reloc::Model, llvm::CodeModel::Model,
llvm::CodeGenOpt::Level, llvm::TargetMachine::CodeGenFileType) + 371
    frame #13: 0x000000010342dee2
libLTO.dylib`llvm::LTOCodeGenerator::compileOptimized(llvm::ArrayRef<llvm::raw_pwrite_stream*>)
+ 274
    frame #14: 0x000000010342dbd2
libLTO.dylib`llvm::LTOCodeGenerator::compileOptimizedToFile(char const**) + 354
    frame #15: 0x000000010342dfa3
libLTO.dylib`llvm::LTOCodeGenerator::compileOptimized() + 51
    frame #16: 0x000000010342e4c2
libLTO.dylib`llvm::LTOCodeGenerator::compile(bool, bool, bool, bool) + 50
    frame #17: 0x000000010280a1c0 libLTO.dylib`lto_codegen_compile + 64

caused by:

frame #10: 0x000000010ae1838e
libLTO.dylib`llvm::DwarfCompileUnit::constructImportedEntityDIE(this=0x00000002c1e033e0,
Module=0x000000027e3f2ee8) + 174 at DwarfCompileUnit.cpp:646
   643       insertDIE(Module, IMDie);
   644       DIE *EntityDie;
   645       auto *Entity = resolve(Module->getEntity());
-> 646       if (auto *NS = dyn_cast<DINamespace>(Entity))
   647         EntityDie = getOrCreateNameSpace(NS);
   648       else if (auto *M = dyn_cast<DIModule>(Entity))
   649         EntityDie = getOrCreateModule(M);
(lldb) p Entity
(llvm::DINode *) $0 = 0x0000000000000000

In the relevant .bc (MIRParser.cpp.o), we have:

!97361 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !1038,
entity: !90731, line: 56)

!90731 = distinct !DISubprogram(name: "isspace", linkageName: "_Z7isspacei",
scope: !90732, file: !90732, line: 267, type: !90733, isLocal: false,
isDefinition: true, scopeLine: 268, flags: DIFlagPrototyped, isOptimized: true,
variables: !90735)


But the entity just disappeared:

(lldb) p ({ for (auto *IE : CUNode->getImportedEntities()) { IE->dump(); } })
<0x10f104628> = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope:
<0x1006f8568>, entity: <0x1024d3658>, line: 48)
<0x10f104668> = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope:
<0x1006f8568>, entity: <0x10230bef8>, line: 49)
[..]
<0x10f115968> = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope:
<0x1006f8568>, entity: <0x10f115920>, line: 55)
<0x27e3f2ee8> = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope:
<0x1006f8568>, line: 56)
<0x10f115b88> = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope:
<0x1006f8568>, entity: <0x10f115b40>, line: 57)
[..]


whereas:
$ llvm-dis lib/CodeGen/MIRParser/CMakeFiles/LLVMMIRParser.dir/MIRParser.cpp.o
-o - | grep '!DIImportedEntity'

!97055 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !1038,
entity: !2714, line: 48)
!97056 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !1038,
entity: !1454, line: 49)
!97057 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !1038,
entity: !97058, line: 53)
[..]
!97359 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !1038,
entity: !97360, line: 55)
!97361 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !1038,
entity: !90731, line: 56)
!97362 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !1038,
entity: !97363, line: 57)
[..]

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20160106/09780b05/attachment-0001.html>


More information about the llvm-bugs mailing list