[llvm] r222195 - Debug Info: In DIBuilder, the context field of a global variable is updated to
Manman Ren
mren at apple.com
Tue Nov 18 08:46:28 PST 2014
Updated testing case in r222239.
Sorry about the breakage.
Manman
> On Nov 18, 2014, at 1:24 AM, Renato Golin <renato.golin at linaro.org> wrote:
>
> Hi Manman,
>
> Can you either move this test to an x86_64 specific directory or
> remove the target triple of the test (what'd be more appropriate),
> please? It's breaking our bots:
>
> http://lab.llvm.org:8011/builders/clang-native-arm-cortex-a9/builds/23284/steps/check-all/logs/LLVM%3A%3Aglobal-with-type-context.ll
>
> cheers,
> --renato
>
> On 18 November 2014 00:29, Manman Ren <manman.ren at gmail.com> wrote:
>> Author: mren
>> Date: Mon Nov 17 18:29:08 2014
>> New Revision: 222195
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=222195&view=rev
>> Log:
>> Debug Info: In DIBuilder, the context field of a global variable is updated to
>> use DIScopeRef.
>>
>> A paired commit at clang will follow to show cases where we will use an
>> identifer for the context of a global variable.
>>
>> rdar://18958417
>>
>> Added:
>> llvm/trunk/test/DebugInfo/global-with-type-context.ll
>> Modified:
>> llvm/trunk/include/llvm/IR/DebugInfo.h
>> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
>> llvm/trunk/lib/IR/DIBuilder.cpp
>> llvm/trunk/lib/IR/DebugInfo.cpp
>>
>> Modified: llvm/trunk/include/llvm/IR/DebugInfo.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfo.h?rev=222195&r1=222194&r2=222195&view=diff
>> ==============================================================================
>> --- llvm/trunk/include/llvm/IR/DebugInfo.h (original)
>> +++ llvm/trunk/include/llvm/IR/DebugInfo.h Mon Nov 17 18:29:08 2014
>> @@ -763,7 +763,7 @@ public:
>> unsigned isLocalToUnit() const { return getHeaderFieldAs<bool>(5); }
>> unsigned isDefinition() const { return getHeaderFieldAs<bool>(6); }
>>
>> - DIScope getContext() const { return getFieldAs<DIScope>(1); }
>> + DIScopeRef getContext() const { return getFieldAs<DIScopeRef>(1); }
>> StringRef getFilename() const { return getFieldAs<DIFile>(2).getFilename(); }
>> StringRef getDirectory() const {
>> return getFieldAs<DIFile>(2).getDirectory();
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=222195&r1=222194&r2=222195&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Mon Nov 17 18:29:08 2014
>> @@ -103,7 +103,7 @@ DIE *DwarfCompileUnit::getOrCreateGlobal
>>
>> assert(GV.isGlobalVariable());
>>
>> - DIScope GVContext = GV.getContext();
>> + DIScope GVContext = DD->resolve(GV.getContext());
>> DIType GTy = DD->resolve(GV.getType());
>>
>> // Construct the context before querying for the existence of the DIE in
>> @@ -122,7 +122,7 @@ DIE *DwarfCompileUnit::getOrCreateGlobal
>> DIE *VariableSpecDIE = getOrCreateStaticMemberDIE(SDMDecl);
>> addDIEEntry(*VariableDIE, dwarf::DW_AT_specification, *VariableSpecDIE);
>> } else {
>> - DeclContext = GV.getContext();
>> + DeclContext = resolve(GV.getContext());
>> // Add name and type.
>> addString(*VariableDIE, dwarf::DW_AT_name, GV.getDisplayName());
>> addType(*VariableDIE, GTy);
>>
>> Modified: llvm/trunk/lib/IR/DIBuilder.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DIBuilder.cpp?rev=222195&r1=222194&r2=222195&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/IR/DIBuilder.cpp (original)
>> +++ llvm/trunk/lib/IR/DIBuilder.cpp Mon Nov 17 18:29:08 2014
>> @@ -844,7 +844,7 @@ static DIGlobalVariable createGlobalVari
>> .concat(isLocalToUnit)
>> .concat(isDefinition)
>> .get(VMContext),
>> - getNonCompileUnitScope(Context), F, Ty, Val,
>> + DIScope(getNonCompileUnitScope(Context)).getRef(), F, Ty, Val,
>> DIDescriptor(Decl)};
>>
>> return DIGlobalVariable(CreateFunc(Elts));
>>
>> Modified: llvm/trunk/lib/IR/DebugInfo.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=222195&r1=222194&r2=222195&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/IR/DebugInfo.cpp (original)
>> +++ llvm/trunk/lib/IR/DebugInfo.cpp Mon Nov 17 18:29:08 2014
>> @@ -567,8 +567,8 @@ bool DIGlobalVariable::Verify() const {
>>
>> if (getDisplayName().empty())
>> return false;
>> - // Make sure context @ field 1 is an MDNode.
>> - if (!fieldIsMDNode(DbgNode, 1))
>> + // Make sure context @ field 1 is a ScopeRef.
>> + if (!fieldIsScopeRef(DbgNode, 1))
>> return false;
>> // Make sure that type @ field 3 is a DITypeRef.
>> if (!fieldIsTypeRef(DbgNode, 3))
>> @@ -1005,7 +1005,7 @@ void DebugInfoFinder::processModule(cons
>> for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) {
>> DIGlobalVariable DIG(GVs.getElement(i));
>> if (addGlobalVariable(DIG)) {
>> - processScope(DIG.getContext());
>> + processScope(DIG.getContext().resolve(TypeIdentifierMap));
>> processType(DIG.getType().resolve(TypeIdentifierMap));
>> }
>> }
>>
>> Added: llvm/trunk/test/DebugInfo/global-with-type-context.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/global-with-type-context.ll?rev=222195&view=auto
>> ==============================================================================
>> --- llvm/trunk/test/DebugInfo/global-with-type-context.ll (added)
>> +++ llvm/trunk/test/DebugInfo/global-with-type-context.ll Mon Nov 17 18:29:08 2014
>> @@ -0,0 +1,154 @@
>> +; REQUIRES: object-emission
>> +
>> +; RUN: %llc_dwarf -filetype=obj -O0 < %s > %t
>> +; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
>> +
>> +; IR generated from clang -g with the following source:
>> +; struct F {
>> +; static const int i = 2;
>> +; virtual ~F();
>> +; };
>> +;
>> +; void f1() {
>> +; int i = F::i;
>> +; }
>> +
>> +; Make sure we correctly handle context of a global variable being a type identifier.
>> +; CHECK: [[STRUCT:.*]]: DW_TAG_structure_type
>> +; CHECK: DW_AT_name [DW_FORM_strp] {{.*}}= "F")
>> +; CHECK: DW_TAG_variable
>> +; CHECK-NEXT: DW_AT_specification {{.*}} "i"
>> +; CHECK-NEXT: DW_AT_const_value [DW_FORM_sdata] (2)
>> +
>> +target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
>> +target triple = "x86_64-apple-darwin14.0.0"
>> +
>> +; Function Attrs: nounwind
>> +define void @_Z2f1v() #0 {
>> +entry:
>> + %i = alloca i32, align 4
>> + call void @llvm.dbg.declare(metadata !{i32* %i}, metadata !29, metadata !30), !dbg !31
>> + store i32 2, i32* %i, align 4, !dbg !31
>> + ret void, !dbg !32
>> +}
>> +
>> +; Function Attrs: nounwind readnone
>> +declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
>> +
>> +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
>> +attributes #1 = { nounwind readnone }
>> +
>> +!llvm.dbg.cu = !{!0}
>> +!llvm.module.flags = !{!26, !27}
>> +!llvm.ident = !{!28}
>> +
>> +!0 = metadata !{metadata !"0x11\004\00clang version 3.6.0 (trunk 222175)\000\00\000\00\001", metadata !1, metadata !2, metadata !3, metadata !20, metadata !24, metadata !2} ; [ DW_TAG_compile_unit ] [<stdin>] [DW_LANG_C_plus_plus]
>> +!1 = metadata !{metadata !"<stdin>", metadata !"."}
>> +!2 = metadata !{}
>> +!3 = metadata !{metadata !4}
>> +!4 = metadata !{metadata !"0x13\00F\001\0064\0064\000\000\000", metadata !5, null, null, metadata !6, metadata !"_ZTS1F", null, metadata !"_ZTS1F"} ; [ DW_TAG_structure_type ] [F] [line 1, size 64, align 64, offset 0] [def] [from ]
>> +!5 = metadata !{metadata !"test.cpp", metadata !"."}
>> +!6 = metadata !{metadata !7, metadata !14, metadata !16}
>> +!7 = metadata !{metadata !"0xd\00_vptr$F\000\0064\000\000\0064", metadata !5, metadata !8, metadata !9} ; [ DW_TAG_member ] [_vptr$F] [line 0, size 64, align 0, offset 0] [artificial] [from ]
>> +!8 = metadata !{metadata !"0x29", metadata !5} ; [ DW_TAG_file_type ]
>> +!9 = metadata !{metadata !"0xf\00\000\0064\000\000\000", null, null, metadata !10} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 0, offset 0] [from __vtbl_ptr_type]
>> +!10 = metadata !{metadata !"0xf\00__vtbl_ptr_type\000\0064\000\000\000", null, null, metadata !11} ; [ DW_TAG_pointer_type ] [__vtbl_ptr_type] [line 0, size 64, align 0, offset 0] [from ]
>> +!11 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", null, null, null, metadata !12, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
>> +!12 = metadata !{metadata !13}
>> +!13 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]
>> +!14 = metadata !{metadata !"0xd\00i\002\000\000\000\004096", metadata !5, metadata !"_ZTS1F", metadata !15, i32 2} ; [ DW_TAG_member ] [i] [line 2, size 0, align 0, offset 0] [static] [from ]
>> +!15 = metadata !{metadata !"0x26\00\000\000\000\000\000", null, null, metadata !13} ; [ DW_TAG_const_type ] [line 0, size 0, align 0, offset 0] [from int]
>> +!16 = metadata !{metadata !"0x2e\00~F\00~F\00\003\000\000\001\000\00256\000\003", metadata !5, metadata !"_ZTS1F", metadata !17, metadata !"_ZTS1F", null, null, null, null} ; [ DW_TAG_subprogram ] [line 3] [~F]
>> +!17 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", null, null, null, metadata !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
>> +!18 = metadata !{null, metadata !19}
>> +!19 = metadata !{metadata !"0xf\00\000\0064\0064\000\001088\00", null, null, metadata !"_ZTS1F"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1F]
>> +!20 = metadata !{metadata !21}
>> +!21 = metadata !{metadata !"0x2e\00f1\00f1\00_Z2f1v\006\000\001\000\000\00256\000\006", metadata !5, metadata !8, metadata !22, null, void ()* @_Z2f1v, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 6] [def] [f1]
>> +!22 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", null, null, null, metadata !23, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
>> +!23 = metadata !{null}
>> +!24 = metadata !{metadata !25}
>> +!25 = metadata !{metadata !"0x34\00i\00i\00\002\001\001", metadata !"_ZTS1F", metadata !8, metadata !15, i32 2, metadata !14} ; [ DW_TAG_variable ] [i] [line 2] [local] [def]
>> +!26 = metadata !{i32 2, metadata !"Dwarf Version", i32 4}
>> +!27 = metadata !{i32 2, metadata !"Debug Info Version", i32 2}
>> +!28 = metadata !{metadata !"clang version 3.6.0 (trunk 222175)"}
>> +!29 = metadata !{metadata !"0x100\00i\007\000", metadata !21, metadata !8, metadata !13} ; [ DW_TAG_auto_variable ] [i] [line 7]
>> +!30 = metadata !{metadata !"0x102"} ; [ DW_TAG_expression ]
>> +!31 = metadata !{i32 7, i32 0, metadata !21, null}
>> +!32 = metadata !{i32 8, i32 0, metadata !21, null}
>> +; REQUIRES: object-emission
>> +
>> +; RUN: %llc_dwarf -filetype=obj -O0 < %s > %t
>> +; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
>> +
>> +; IR generated from clang -g with the following source:
>> +; struct F {
>> +; static const int i = 2;
>> +; virtual ~F();
>> +; };
>> +;
>> +; void f1() {
>> +; int i = F::i;
>> +; }
>> +
>> +; Make sure we correctly handle context of a global variable being a type identifier.
>> +; CHECK: [[STRUCT:.*]]: DW_TAG_structure_type
>> +; CHECK: DW_AT_name [DW_FORM_strp] {{.*}}= "F")
>> +; CHECK: DW_TAG_variable
>> +; CHECK-NEXT: DW_AT_specification {{.*}} "i"
>> +; CHECK-NEXT: DW_AT_const_value [DW_FORM_sdata] (2)
>> +
>> +target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
>> +target triple = "x86_64-apple-darwin14.0.0"
>> +
>> +; Function Attrs: nounwind
>> +define void @_Z2f1v() #0 {
>> +entry:
>> + %i = alloca i32, align 4
>> + call void @llvm.dbg.declare(metadata !{i32* %i}, metadata !29, metadata !30), !dbg !31
>> + store i32 2, i32* %i, align 4, !dbg !31
>> + ret void, !dbg !32
>> +}
>> +
>> +; Function Attrs: nounwind readnone
>> +declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
>> +
>> +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
>> +attributes #1 = { nounwind readnone }
>> +
>> +!llvm.dbg.cu = !{!0}
>> +!llvm.module.flags = !{!26, !27}
>> +!llvm.ident = !{!28}
>> +
>> +!0 = metadata !{metadata !"0x11\004\00clang version 3.6.0 (trunk 222175)\000\00\000\00\001", metadata !1, metadata !2, metadata !3, metadata !20, metadata !24, metadata !2} ; [ DW_TAG_compile_unit ] [<stdin>] [DW_LANG_C_plus_plus]
>> +!1 = metadata !{metadata !"<stdin>", metadata !"."}
>> +!2 = metadata !{}
>> +!3 = metadata !{metadata !4}
>> +!4 = metadata !{metadata !"0x13\00F\001\0064\0064\000\000\000", metadata !5, null, null, metadata !6, metadata !"_ZTS1F", null, metadata !"_ZTS1F"} ; [ DW_TAG_structure_type ] [F] [line 1, size 64, align 64, offset 0] [def] [from ]
>> +!5 = metadata !{metadata !"test.cpp", metadata !"."}
>> +!6 = metadata !{metadata !7, metadata !14, metadata !16}
>> +!7 = metadata !{metadata !"0xd\00_vptr$F\000\0064\000\000\0064", metadata !5, metadata !8, metadata !9} ; [ DW_TAG_member ] [_vptr$F] [line 0, size 64, align 0, offset 0] [artificial] [from ]
>> +!8 = metadata !{metadata !"0x29", metadata !5} ; [ DW_TAG_file_type ]
>> +!9 = metadata !{metadata !"0xf\00\000\0064\000\000\000", null, null, metadata !10} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 0, offset 0] [from __vtbl_ptr_type]
>> +!10 = metadata !{metadata !"0xf\00__vtbl_ptr_type\000\0064\000\000\000", null, null, metadata !11} ; [ DW_TAG_pointer_type ] [__vtbl_ptr_type] [line 0, size 64, align 0, offset 0] [from ]
>> +!11 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", null, null, null, metadata !12, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
>> +!12 = metadata !{metadata !13}
>> +!13 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]
>> +!14 = metadata !{metadata !"0xd\00i\002\000\000\000\004096", metadata !5, metadata !"_ZTS1F", metadata !15, i32 2} ; [ DW_TAG_member ] [i] [line 2, size 0, align 0, offset 0] [static] [from ]
>> +!15 = metadata !{metadata !"0x26\00\000\000\000\000\000", null, null, metadata !13} ; [ DW_TAG_const_type ] [line 0, size 0, align 0, offset 0] [from int]
>> +!16 = metadata !{metadata !"0x2e\00~F\00~F\00\003\000\000\001\000\00256\000\003", metadata !5, metadata !"_ZTS1F", metadata !17, metadata !"_ZTS1F", null, null, null, null} ; [ DW_TAG_subprogram ] [line 3] [~F]
>> +!17 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", null, null, null, metadata !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
>> +!18 = metadata !{null, metadata !19}
>> +!19 = metadata !{metadata !"0xf\00\000\0064\0064\000\001088\00", null, null, metadata !"_ZTS1F"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1F]
>> +!20 = metadata !{metadata !21}
>> +!21 = metadata !{metadata !"0x2e\00f1\00f1\00_Z2f1v\006\000\001\000\000\00256\000\006", metadata !5, metadata !8, metadata !22, null, void ()* @_Z2f1v, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 6] [def] [f1]
>> +!22 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", null, null, null, metadata !23, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
>> +!23 = metadata !{null}
>> +!24 = metadata !{metadata !25}
>> +!25 = metadata !{metadata !"0x34\00i\00i\00\002\001\001", metadata !"_ZTS1F", metadata !8, metadata !15, i32 2, metadata !14} ; [ DW_TAG_variable ] [i] [line 2] [local] [def]
>> +!26 = metadata !{i32 2, metadata !"Dwarf Version", i32 4}
>> +!27 = metadata !{i32 2, metadata !"Debug Info Version", i32 2}
>> +!28 = metadata !{metadata !"clang version 3.6.0 (trunk 222175)"}
>> +!29 = metadata !{metadata !"0x100\00i\007\000", metadata !21, metadata !8, metadata !13} ; [ DW_TAG_auto_variable ] [i] [line 7]
>> +!30 = metadata !{metadata !"0x102"} ; [ DW_TAG_expression ]
>> +!31 = metadata !{i32 7, i32 0, metadata !21, null}
>> +!32 = metadata !{i32 8, i32 0, metadata !21, null}
>>
>>
>> _______________________________________________
>> 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