Home | History | Annotate | Download | only in DebugInfo
      1 ; RUN: %llc_dwarf %s -filetype=obj -o %t
      2 ; RUN: llvm-dwarfdump -debug-info %t | FileCheck %s
      3 
      4 ; Reduced test case from PR35212. Two DISubprogram belong to a different CU but
      5 ; share a scope. Both are declarations and end up in the scope's CU. We want to
      6 ; check that the CU from the context DIE is used (rather than from the IR).
      7 ; This manifests itself by the DW_base_type ending up in the second CU, rather
      8 ; than in the first one as specified in the IR.
      9 
     10 ; CHECK: DW_TAG_compile_unit
     11 ; CHECK-NEXT: discriminator 0
     12 ; CHECK: DW_TAG_compile_unit
     13 ; CHECK-NEXT: discriminator 1
     14 ; CHECK: DW_TAG_structure_type
     15 ; CHECK-NOT: NULL
     16 ; CHECK: DW_TAG_subprogram
     17 ; CHECK-NOT: NULL
     18 ; CHECK: DW_TAG_formal_parameter
     19 ; CHECK-NOT: NULL
     20 ; CHECK: DW_AT_type{{.*}}"usize"
     21 ; CHECK: NULL
     22 ; CHECK: DW_TAG_base_type
     23 ; CHECK-NOT: NULL
     24 ; CHECK: DW_AT_name{{.*}}"usize"
     25 
     26 define hidden void @foo() !dbg !4 {
     27   ret void, !dbg !7
     28 }
     29 
     30 !llvm.dbg.cu = !{!0, !2}
     31 !llvm.module.flags = !{!3}
     32 
     33 !0 = distinct !DICompileUnit(language: DW_LANG_Rust, file: !1, producer: "clang LLVM (rustc version 1.23.0-nightly (discriminator 0))", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
     34 !1 = !DIFile(filename: "../lib.rs", directory: "/home/alex/code/rust4/lol")
     35 !2 = distinct !DICompileUnit(language: DW_LANG_Rust, file: !1, producer: "clang LLVM (rustc version 1.23.0-nightly (discriminator 1))", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
     36 !3 = !{i32 2, !"Debug Info Version", i32 3}
     37 !4 = distinct !DISubprogram(name: "clone<alloc::string::String>", linkageName: "_ZN5alloc3vec8{{impl}}28clone<alloc::string::String>E", scope: null, file: !1, line: 1519, type: !5, isLocal: false, isDefinition: true, scopeLine: 1519, flags: DIFlagPrototyped, isOptimized: true, unit: !0, templateParams: !6, retainedNodes: !6)
     38 !5 = !DISubroutineType(types: !6)
     39 !6 = !{}
     40 !7 = !DILocation(line: 1612, scope: !8, inlinedAt: !11)
     41 !8 = distinct !DILexicalBlock(scope: !9, file: !1, line: 86, column: 12)
     42 !9 = distinct !DISubprogram(name: "allocate_in<alloc::string::String,alloc::heap::Heap>", linkageName: "_ZN5alloc7raw_vec8{{impl}}52allocate_in<alloc::string::String,alloc::heap::Heap>E", scope: !10, file: !1, line: 82, type: !5, isLocal: false, isDefinition: true, scopeLine: 82, flags: DIFlagPrototyped, isOptimized: true, unit: !2, templateParams: !6, retainedNodes: !6)
     43 !10 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "RawVec<alloc::string::String, alloc::heap::Heap>", file: !1, size: 128, align: 64, elements: !6, identifier: "5c6e4db16d2c64555e40661d70c4d81e")
     44 !11 = distinct !DILocation(line: 86, scope: !8, inlinedAt: !12)
     45 !12 = distinct !DILocation(line: 141, scope: !13, inlinedAt: !17)
     46 !13 = distinct !DISubprogram(name: "with_capacity<alloc::string::String>", linkageName: "_ZN5alloc7raw_vec8{{impl}}36with_capacity<alloc::string::String>E", scope: !10, file: !1, line: 140, type: !5, isLocal: false, isDefinition: true, scopeLine: 140, flags: DIFlagPrototyped, isOptimized: true, unit: !0, templateParams: !6, retainedNodes: !14)
     47 !14 = !{!15}
     48 !15 = !DILocalVariable(name: "cap", arg: 1, scope: !13, file: !1, line: 1, type: !16)
     49 !16 = !DIBasicType(name: "usize", size: 64, encoding: DW_ATE_unsigned)
     50 !17 = !DILocation(line: 1521, scope: !4)
     51