[llvm] r222195 - Debug Info: In DIBuilder, the context field of a global variable is updated to
Renato Golin
renato.golin at linaro.org
Tue Nov 18 01:24:37 PST 2014
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
More information about the llvm-commits
mailing list