[llvm] r227290 - PR22356: DebugInfo: Handle the size of a member where the type of that member is a typedef (or other sugar) of a declaration.

Hans Wennborg hans at chromium.org
Thu Jan 29 12:59:08 PST 2015


Merged in r227492.

Thanks,
Hans

On Thu, Jan 29, 2015 at 11:56 AM, David Blaikie <dblaikie at gmail.com> wrote:
> Hans,
>
> This one might be good for 3.6?
>
> On Tue, Jan 27, 2015 at 6:34 PM, David Blaikie <dblaikie at gmail.com> wrote:
>>
>> Author: dblaikie
>> Date: Tue Jan 27 20:34:53 2015
>> New Revision: 227290
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=227290&view=rev
>> Log:
>> PR22356: DebugInfo: Handle the size of a member where the type of that
>> member is a typedef (or other sugar) of a declaration.
>>
>> Modified:
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>>     llvm/trunk/test/DebugInfo/X86/decl-derived-member.ll
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=227290&r1=227289&r2=227290&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Tue Jan 27 20:34:53
>> 2015
>> @@ -627,10 +627,7 @@ static uint64_t getBaseTypeSize(DwarfDeb
>>
>>    DIType BaseType = DD->resolve(Ty.getTypeDerivedFrom());
>>
>> -  // If this type is not derived from any type or the type is a
>> declaration then
>> -  // take conservative approach.
>> -  if (!BaseType.isValid() || BaseType.isForwardDecl())
>> -    return Ty.getSizeInBits();
>> +  assert(BaseType.isValid());
>>
>>    // If this is a derived type, go ahead and get the base type, unless
>> it's a
>>    // reference then it's just the size of the field. Pointer types have
>> no need
>> @@ -1474,7 +1471,7 @@ void DwarfUnit::constructMemberDIE(DIE &
>>      uint64_t FieldSize = getBaseTypeSize(DD, DT);
>>      uint64_t OffsetInBytes;
>>
>> -    if (Size != FieldSize) {
>> +    if (FieldSize && Size != FieldSize) {
>>        // Handle bitfield, assume bytes are 8 bits.
>>        addUInt(MemberDie, dwarf::DW_AT_byte_size, None, FieldSize/8);
>>        addUInt(MemberDie, dwarf::DW_AT_bit_size, None, Size);
>>
>> Modified: llvm/trunk/test/DebugInfo/X86/decl-derived-member.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/decl-derived-member.ll?rev=227290&r1=227289&r2=227290&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/DebugInfo/X86/decl-derived-member.ll (original)
>> +++ llvm/trunk/test/DebugInfo/X86/decl-derived-member.ll Tue Jan 27
>> 20:34:53 2015
>> @@ -7,8 +7,9 @@
>>  ; struct base {
>>  ;  virtual ~base();
>>  ; };
>> +; typedef base base_type;
>>  ; struct foo {
>> -;  base b;
>> +;  base_type b;
>>  ; };
>>  ; foo f;
>>
>> @@ -20,40 +21,47 @@
>>
>>  %struct.foo = type { %struct.base }
>>  %struct.base = type { i32 (...)** }
>> +
>> +$_ZN3fooC2Ev = comdat any
>> +
>> +$_ZN3fooD2Ev = comdat any
>> +
>> +$_ZN4baseC2Ev = comdat any
>> +
>>  @f = global %struct.foo zeroinitializer, align 8
>>  @__dso_handle = external global i8
>>  @_ZTV4base = external unnamed_addr constant [4 x i8*]
>> - at llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32,
>> void ()* } { i32 65535, void ()* @_GLOBAL__I_a }]
>> + at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{
>> i32, void ()*, i8* } { i32 65535, void ()*
>> @_GLOBAL__sub_I_decl_derived_member.cpp, i8* null }]
>>
>>  define internal void @__cxx_global_var_init() section ".text.startup" {
>>  entry:
>> -  call void @_ZN3fooC2Ev(%struct.foo* @f) #2, !dbg !35
>> -  %0 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%struct.foo*)*
>> @_ZN3fooD2Ev to void (i8*)*), i8* bitcast (%struct.foo* @f to i8*), i8*
>> @__dso_handle) #2, !dbg !35
>> -  ret void, !dbg !35
>> +  call void @_ZN3fooC2Ev(%struct.foo* @f) #2, !dbg !33
>> +  %0 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%struct.foo*)*
>> @_ZN3fooD2Ev to void (i8*)*), i8* bitcast (%struct.foo* @f to i8*), i8*
>> @__dso_handle) #2, !dbg !33
>> +  ret void, !dbg !33
>>  }
>>
>>  ; Function Attrs: inlinehint nounwind uwtable
>> -define linkonce_odr void @_ZN3fooC2Ev(%struct.foo* %this) unnamed_addr #0
>> align 2 {
>> +define linkonce_odr void @_ZN3fooC2Ev(%struct.foo* %this) unnamed_addr #0
>> comdat align 2 {
>>  entry:
>>    %this.addr = alloca %struct.foo*, align 8
>>    store %struct.foo* %this, %struct.foo** %this.addr, align 8
>> -  call void @llvm.dbg.declare(metadata %struct.foo** %this.addr, metadata
>> !36, metadata !{!"0x102"}), !dbg !38
>> +  call void @llvm.dbg.declare(metadata %struct.foo** %this.addr, metadata
>> !34, metadata !36), !dbg !37
>>    %this1 = load %struct.foo** %this.addr
>> -  %b = getelementptr inbounds %struct.foo* %this1, i32 0, i32 0, !dbg !39
>> -  call void @_ZN4baseC2Ev(%struct.base* %b) #2, !dbg !39
>> -  ret void, !dbg !39
>> +  %b = getelementptr inbounds %struct.foo* %this1, i32 0, i32 0, !dbg !38
>> +  call void @_ZN4baseC2Ev(%struct.base* %b) #2, !dbg !38
>> +  ret void, !dbg !38
>>  }
>>
>>  ; Function Attrs: inlinehint uwtable
>> -define linkonce_odr void @_ZN3fooD2Ev(%struct.foo* %this) unnamed_addr #1
>> align 2 {
>> +define linkonce_odr void @_ZN3fooD2Ev(%struct.foo* %this) unnamed_addr #1
>> comdat align 2 {
>>  entry:
>>    %this.addr = alloca %struct.foo*, align 8
>>    store %struct.foo* %this, %struct.foo** %this.addr, align 8
>> -  call void @llvm.dbg.declare(metadata %struct.foo** %this.addr, metadata
>> !40, metadata !{!"0x102"}), !dbg !41
>> +  call void @llvm.dbg.declare(metadata %struct.foo** %this.addr, metadata
>> !39, metadata !36), !dbg !40
>>    %this1 = load %struct.foo** %this.addr
>> -  %b = getelementptr inbounds %struct.foo* %this1, i32 0, i32 0, !dbg !42
>> -  call void @_ZN4baseD1Ev(%struct.base* %b), !dbg !42
>> -  ret void, !dbg !44
>> +  %b = getelementptr inbounds %struct.foo* %this1, i32 0, i32 0, !dbg !41
>> +  call void @_ZN4baseD1Ev(%struct.base* %b), !dbg !41
>> +  ret void, !dbg !43
>>  }
>>
>>  ; Function Attrs: nounwind
>> @@ -62,24 +70,24 @@ declare i32 @__cxa_atexit(void (i8*)*, i
>>  ; Function Attrs: nounwind readnone
>>  declare void @llvm.dbg.declare(metadata, metadata, metadata) #3
>>
>> -declare void @_ZN4baseD1Ev(%struct.base*) #4
>> -
>>  ; Function Attrs: inlinehint nounwind uwtable
>> -define linkonce_odr void @_ZN4baseC2Ev(%struct.base* %this) unnamed_addr
>> #0 align 2 {
>> +define linkonce_odr void @_ZN4baseC2Ev(%struct.base* %this) unnamed_addr
>> #0 comdat align 2 {
>>  entry:
>>    %this.addr = alloca %struct.base*, align 8
>>    store %struct.base* %this, %struct.base** %this.addr, align 8
>> -  call void @llvm.dbg.declare(metadata %struct.base** %this.addr,
>> metadata !45, metadata !{!"0x102"}), !dbg !47
>> +  call void @llvm.dbg.declare(metadata %struct.base** %this.addr,
>> metadata !44, metadata !36), !dbg !46
>>    %this1 = load %struct.base** %this.addr
>> -  %0 = bitcast %struct.base* %this1 to i8***, !dbg !48
>> -  store i8** getelementptr inbounds ([4 x i8*]* @_ZTV4base, i64 0, i64
>> 2), i8*** %0, !dbg !48
>> -  ret void, !dbg !48
>> +  %0 = bitcast %struct.base* %this1 to i32 (...)***, !dbg !47
>> +  store i32 (...)** bitcast (i8** getelementptr inbounds ([4 x i8*]*
>> @_ZTV4base, i64 0, i64 2) to i32 (...)**), i32 (...)*** %0, !dbg !47
>> +  ret void, !dbg !47
>>  }
>>
>> -define internal void @_GLOBAL__I_a() section ".text.startup" {
>> +declare void @_ZN4baseD1Ev(%struct.base*) #4
>> +
>> +define internal void @_GLOBAL__sub_I_decl_derived_member.cpp() section
>> ".text.startup" {
>>  entry:
>> -  call void @__cxx_global_var_init(), !dbg !49
>> -  ret void, !dbg !49
>> +  call void @__cxx_global_var_init(), !dbg !48
>> +  ret void
>>  }
>>
>>  attributes #0 = { inlinehint nounwind uwtable
>> "less-precise-fpmad"="false" "no-frame-pointer-elim"="true"
>> "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false"
>> "no-nans-fp-math"="false" "stack-protector-buffer-size"="8"
>> "unsafe-fp-math"="false" "use-soft-float"="false" }
>> @@ -89,56 +97,55 @@ attributes #3 = { nounwind readnone }
>>  attributes #4 = { "less-precise-fpmad"="false"
>> "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"
>> "no-infs-fp-math"="false" "no-nans-fp-math"="false"
>> "stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
>> "use-soft-float"="false" }
>>
>>  !llvm.dbg.cu = !{!0}
>> -!llvm.module.flags = !{!32, !33}
>> -!llvm.ident = !{!34}
>> +!llvm.module.flags = !{!30, !31}
>> +!llvm.ident = !{!32}
>>
>> -!0 = !{!"0x11\004\00clang version 3.5.0 (trunk 203673) (llvm/trunk
>> 203681)\000\00\000\00\001", !1, !2, !3, !8, !30, !2} ; [ DW_TAG_compile_unit
>> ] [/usr/local/google/home/echristo/foo.cc] [DW_LANG_C_plus_plus]
>> -!1 = !{!"foo.cc", !"/usr/local/google/home/echristo"}
>> +!0 = !{!"0x11\004\00clang version 3.7.0 (trunk 227104) (llvm/trunk
>> 227103)\000\00\000\00\001", !1, !2, !3, !9, !28, !2} ; [ DW_TAG_compile_unit
>> ] [/tmp/dbginfo/decl-derived-member.cpp] [DW_LANG_C_plus_plus]
>> +!1 = !{!"decl-derived-member.cpp", !"/tmp/dbginfo"}
>>  !2 = !{}
>> -!3 = !{!4, !7}
>> +!3 = !{!4, !8}
>>  !4 = !{!"0x13\00foo\005\0064\0064\000\000\000", !1, null, null, !5, null,
>> null, !"_ZTS3foo"} ; [ DW_TAG_structure_type ] [foo] [line 5, size 64, align
>> 64, offset 0] [def] [from ]
>>  !5 = !{!6}
>> -!6 = !{!"0xd\00b\006\0064\0064\000\000", !1, !"_ZTS3foo", !"_ZTS4base"} ;
>> [ DW_TAG_member ] [b] [line 6, size 64, align 64, offset 0] [from _ZTS4base]
>> -!7 = !{!"0x13\00base\001\000\000\000\004\000", !1, null, null, null,
>> null, null, !"_ZTS4base"} ; [ DW_TAG_structure_type ] [base] [line 1, size
>> 0, align 0, offset 0] [decl] [from ]
>> -!8 = !{!9, !13, !19, !22, !28}
>> -!9 =
>> !{!"0x2e\00__cxx_global_var_init\00__cxx_global_var_init\00\009\001\001\000\006\00256\000\009",
>> !1, !10, !11, null, void ()* @__cxx_global_var_init, null, null, !2} ; [
>> DW_TAG_subprogram ] [line 9] [local] [def] [__cxx_global_var_init]
>> -!10 = !{!"0x29", !1}         ; [ DW_TAG_file_type ]
>> [/usr/local/google/home/echristo/foo.cc]
>> -!11 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !12, null,
>> null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0]
>> [from ]
>> -!12 = !{null}
>> -!13 =
>> !{!"0x2e\00~foo\00~foo\00_ZN3fooD2Ev\005\000\001\000\006\00320\000\005", !1,
>> !"_ZTS3foo", !14, null, void (%struct.foo*)* @_ZN3fooD2Ev, null, !17, !2} ;
>> [ DW_TAG_subprogram ] [line 5] [def] [~foo]
>> -!14 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !15, null,
>> null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0]
>> [from ]
>> -!15 = !{null, !16}
>> -!16 = !{!"0xf\00\000\0064\0064\000\001088", null, null, !"_ZTS3foo"} ; [
>> DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial]
>> [from _ZTS3foo]
>> -!17 = !{!"0x2e\00~foo\00~foo\00\000\000\000\000\006\00320\000\000", null,
>> !"_ZTS3foo", !14, null, null, null, i32 0, !18} ; [ DW_TAG_subprogram ]
>> [line 0] [~foo]
>> -!18 = !{i32 786468}
>> -!19 =
>> !{!"0x2e\00foo\00foo\00_ZN3fooC2Ev\005\000\001\000\006\00320\000\005", !1,
>> !"_ZTS3foo", !14, null, void (%struct.foo*)* @_ZN3fooC2Ev, null, !20, !2} ;
>> [ DW_TAG_subprogram ] [line 5] [def] [foo]
>> -!20 = !{!"0x2e\00foo\00foo\00\000\000\000\000\006\00320\000\000", null,
>> !"_ZTS3foo", !14, null, null, null, i32 0, !21} ; [ DW_TAG_subprogram ]
>> [line 0] [foo]
>> -!21 = !{i32 786468}
>> -!22 =
>> !{!"0x2e\00base\00base\00_ZN4baseC2Ev\001\000\001\000\006\00320\000\001",
>> !1, !"_ZTS4base", !23, null, void (%struct.base*)* @_ZN4baseC2Ev, null, !26,
>> !2} ; [ DW_TAG_subprogram ] [line 1] [def] [base]
>> -!23 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !24, null,
>> null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0]
>> [from ]
>> -!24 = !{null, !25}
>> -!25 = !{!"0xf\00\000\0064\0064\000\001088", null, null, !"_ZTS4base"} ; [
>> DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial]
>> [from _ZTS4base]
>> -!26 = !{!"0x2e\00base\00base\00\000\000\000\000\006\00320\000\000", null,
>> !"_ZTS4base", !23, null, null, null, i32 0, !27} ; [ DW_TAG_subprogram ]
>> [line 0] [base]
>> -!27 = !{i32 786468}
>> -!28 = !{!"0x2e\00\00\00_GLOBAL__I_a\001\001\001\000\006\0064\000\001",
>> !1, !10, !29, null, void ()* @_GLOBAL__I_a, null, null, !2} ; [
>> DW_TAG_subprogram ] [line 1] [local] [def]
>> -!29 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !2, null,
>> null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0]
>> [from ]
>> -!30 = !{!31}
>> -!31 = !{!"0x34\00f\00f\00\009\000\001", null, !10, !4, %struct.foo* @f,
>> null} ; [ DW_TAG_variable ] [f] [line 9] [def]
>> -!32 = !{i32 2, !"Dwarf Version", i32 4}
>> -!33 = !{i32 1, !"Debug Info Version", i32 2}
>> -!34 = !{!"clang version 3.5.0 (trunk 203673) (llvm/trunk 203681)"}
>> -!35 = !MDLocation(line: 9, scope: !9)
>> -!36 = !{!"0x101\00this\0016777216\001088", !19, null, !37} ; [
>> DW_TAG_arg_variable ] [this] [line 0]
>> -!37 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS3foo"} ; [
>> DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS3foo]
>> -!38 = !MDLocation(line: 0, scope: !19)
>> -!39 = !MDLocation(line: 5, scope: !19)
>> -!40 = !{!"0x101\00this\0016777216\001088", !13, null, !37} ; [
>> DW_TAG_arg_variable ] [this] [line 0]
>> -!41 = !MDLocation(line: 0, scope: !13)
>> -!42 = !MDLocation(line: 5, scope: !43)
>> -!43 = !{!"0xb\005\000\000", !1, !13} ; [ DW_TAG_lexical_block ]
>> [/usr/local/google/home/echristo/foo.cc]
>> -!44 = !MDLocation(line: 5, scope: !13)
>> -!45 = !{!"0x101\00this\0016777216\001088", !22, null, !46} ; [
>> DW_TAG_arg_variable ] [this] [line 0]
>> -!46 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS4base"} ; [
>> DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS4base]
>> -!47 = !MDLocation(line: 0, scope: !22)
>> -!48 = !MDLocation(line: 1, scope: !22)
>> -!49 = !MDLocation(line: 1, scope: !28)
>> +!6 = !{!"0xd\00b\006\0064\0064\000\000", !1, !"_ZTS3foo", !7} ; [
>> DW_TAG_member ] [b] [line 6, size 64, align 64, offset 0] [from base_type]
>> +!7 = !{!"0x16\00base_type\004\000\000\000\000", !1, null, !"_ZTS4base"} ;
>> [ DW_TAG_typedef ] [base_type] [line 4, size 0, align 0, offset 0] [from
>> _ZTS4base]
>> +!8 = !{!"0x13\00base\001\000\000\000\004\000", !1, null, null, null,
>> null, null, !"_ZTS4base"} ; [ DW_TAG_structure_type ] [base] [line 1, size
>> 0, align 0, offset 0] [decl] [from ]
>> +!9 = !{!10, !14, !19, !24, !26}
>> +!10 =
>> !{!"0x2e\00__cxx_global_var_init\00__cxx_global_var_init\00\008\001\001\000\000\00256\000\008",
>> !1, !11, !12, null, void ()* @__cxx_global_var_init, null, null, !2} ; [
>> DW_TAG_subprogram ] [line 8] [local] [def] [__cxx_global_var_init]
>> +!11 = !{!"0x29", !1}                              ; [ DW_TAG_file_type ]
>> [/tmp/dbginfo/decl-derived-member.cpp]
>> +!12 = !{!"0x15\00\000\000\000\000\000\000", null, null, null, !13, null,
>> null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0]
>> [from ]
>> +!13 = !{null}
>> +!14 =
>> !{!"0x2e\00foo\00foo\00_ZN3fooC2Ev\005\000\001\000\000\00320\000\005", !1,
>> !"_ZTS3foo", !15, null, void (%struct.foo*)* @_ZN3fooC2Ev, null, !18, !2} ;
>> [ DW_TAG_subprogram ] [line 5] [def] [foo]
>> +!15 = !{!"0x15\00\000\000\000\000\000\000", null, null, null, !16, null,
>> null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0]
>> [from ]
>> +!16 = !{null, !17}
>> +!17 = !{!"0xf\00\000\0064\0064\000\001088\00", null, null, !"_ZTS3foo"} ;
>> [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial]
>> [from _ZTS3foo]
>> +!18 = !{!"0x2e\00foo\00foo\00\000\000\000\000\000\00320\000\000", null,
>> !"_ZTS3foo", !15, null, null, null, null, null} ; [ DW_TAG_subprogram ]
>> [line 0] [foo]
>> +!19 =
>> !{!"0x2e\00base\00base\00_ZN4baseC2Ev\001\000\001\000\000\00320\000\001",
>> !1, !"_ZTS4base", !20, null, void (%struct.base*)* @_ZN4baseC2Ev, null, !23,
>> !2} ; [ DW_TAG_subprogram ] [line 1] [def] [base]
>> +!20 = !{!"0x15\00\000\000\000\000\000\000", null, null, null, !21, null,
>> null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0]
>> [from ]
>> +!21 = !{null, !22}
>> +!22 = !{!"0xf\00\000\0064\0064\000\001088\00", null, null, !"_ZTS4base"}
>> ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial]
>> [from _ZTS4base]
>> +!23 = !{!"0x2e\00base\00base\00\000\000\000\000\000\00320\000\000", null,
>> !"_ZTS4base", !20, null, null, null, null, null} ; [ DW_TAG_subprogram ]
>> [line 0] [base]
>> +!24 =
>> !{!"0x2e\00~foo\00~foo\00_ZN3fooD2Ev\005\000\001\000\000\00320\000\005", !1,
>> !"_ZTS3foo", !15, null, void (%struct.foo*)* @_ZN3fooD2Ev, null, !25, !2} ;
>> [ DW_TAG_subprogram ] [line 5] [def] [~foo]
>> +!25 = !{!"0x2e\00~foo\00~foo\00\000\000\000\000\000\00320\000\000", null,
>> !"_ZTS3foo", !15, null, null, null, null, null} ; [ DW_TAG_subprogram ]
>> [line 0] [~foo]
>> +!26 =
>> !{!"0x2e\00\00\00_GLOBAL__sub_I_decl_derived_member.cpp\000\001\001\000\000\0064\000\000",
>> !1, !11, !27, null, void ()* @_GLOBAL__sub_I_decl_derived_member.cpp, null,
>> null, !2} ; [ DW_TAG_subprogram ] [line 0] [local] [def]
>> +!27 = !{!"0x15\00\000\000\000\000\000\000", null, null, null, !2, null,
>> null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0]
>> [from ]
>> +!28 = !{!29}
>> +!29 = !{!"0x34\00f\00f\00\008\000\001", null, !11, !"_ZTS3foo",
>> %struct.foo* @f, null} ; [ DW_TAG_variable ] [f] [line 8] [def]
>> +!30 = !{i32 2, !"Dwarf Version", i32 4}
>> +!31 = !{i32 2, !"Debug Info Version", i32 2}
>> +!32 = !{!"clang version 3.7.0 (trunk 227104) (llvm/trunk 227103)"}
>> +!33 = !MDLocation(line: 8, column: 5, scope: !10)
>> +!34 = !{!"0x101\00this\0016777216\001088", !14, null, !35} ; [
>> DW_TAG_arg_variable ] [this] [line 0]
>> +!35 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS3foo"} ; [
>> DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS3foo]
>> +!36 = !{!"0x102"}                                 ; [ DW_TAG_expression ]
>> +!37 = !MDLocation(line: 0, scope: !14)
>> +!38 = !MDLocation(line: 5, column: 8, scope: !14)
>> +!39 = !{!"0x101\00this\0016777216\001088", !24, null, !35} ; [
>> DW_TAG_arg_variable ] [this] [line 0]
>> +!40 = !MDLocation(line: 0, scope: !24)
>> +!41 = !MDLocation(line: 5, column: 8, scope: !42)
>> +!42 = !{!"0xb\005\008\002", !1, !24}              ; [
>> DW_TAG_lexical_block ] [/tmp/dbginfo/decl-derived-member.cpp]
>> +!43 = !MDLocation(line: 5, column: 8, scope: !24)
>> +!44 = !{!"0x101\00this\0016777216\001088", !19, null, !45} ; [
>> DW_TAG_arg_variable ] [this] [line 0]
>> +!45 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS4base"} ; [
>> DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS4base]
>> +!46 = !MDLocation(line: 0, scope: !19)
>> +!47 = !MDLocation(line: 1, column: 8, scope: !19)
>> +!48 = !MDLocation(line: 0, scope: !26)
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



More information about the llvm-commits mailing list