[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.

David Blaikie dblaikie at gmail.com
Thu Jan 29 11:56:08 PST 2015


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150129/13e7c3b3/attachment.html>


More information about the llvm-commits mailing list