Skip to content

Commit bf1fdb8

Browse files
committedJan 7, 2019
[Verifier] Reject invalid type for DILocalVariable.
Reviewers: aprantl Subscribers: hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D56414 llvm-svn: 350578
1 parent c5e0c58 commit bf1fdb8

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed
 

‎llvm/lib/IR/Verifier.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -1241,6 +1241,8 @@ void Verifier::visitDILocalVariable(const DILocalVariable &N) {
12411241
AssertDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N);
12421242
AssertDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
12431243
"local variable requires a valid scope", &N, N.getRawScope());
1244+
if (auto Ty = N.getType())
1245+
AssertDI(!isa<DISubroutineType>(Ty), "invalid type", &N, N.getType());
12441246
}
12451247

12461248
void Verifier::visitDILabel(const DILabel &N) {

‎llvm/test/DebugInfo/Generic/varargs.ll

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ attributes #1 = { nounwind readnone }
9595
!23 = !DILocalVariable(name: "a", line: 16, scope: !14, file: !15, type: !4)
9696
!24 = !DILocation(line: 16, scope: !14)
9797
; Manually modifed to avoid dependence on pointer size
98-
!25 = !DILocalVariable(name: "fptr", line: 18, scope: !14, file: !15, type: !16)
98+
!25 = !DILocalVariable(name: "fptr", line: 18, scope: !14, file: !15, type: !26)
9999
!26 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !16)
100100
!27 = !DILocation(line: 18, scope: !14)
101101
!28 = !DILocation(line: 22, scope: !14)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
; RUN: opt %s -verify 2>&1 | FileCheck %s
2+
; CHECK: invalid type
3+
; CHECK: !20 = !DILocalVariable(name: "f", scope: !21, file: !13, line: 970, type: !14)
4+
; CHECK: !14 = !DISubroutineType(types: !15)
5+
6+
7+
%timespec.0.1.2.3.0.1.2 = type { i64, i64 }
8+
define internal i64 @init_vdso_clock_gettime(i32, %timespec.0.1.2.3.0.1.2* nonnull) unnamed_addr !dbg !142 {
9+
call void @llvm.dbg.value(metadata i64 (i32, %timespec.0.1.2.3.0.1.2*)* null, metadata !162, metadata !DIExpression()), !dbg !167
10+
ret i64 -38, !dbg !168
11+
}
12+
declare void @llvm.dbg.value(metadata, metadata, metadata) #0
13+
!llvm.module.flags = !{!0}
14+
!llvm.dbg.cu = !{!1}
15+
!0 = !{i32 2, !"Debug Info Version", i32 3}
16+
!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "zig 0.3.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !76)
17+
!2 = !DIFile(filename: "test", directory: ".")
18+
!3 = !{!4}
19+
!4 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Arch", scope: !5, file: !5, line: 44, baseType: !6, size: 8, align: 8, elements: !7)
20+
!5 = !DIFile(filename: "builtin.zig", directory: "/home/andy/.local/share/zig/stage1/builtin/ugMGxVES9OkDAffv3xhJS3KQVy0Wm1xPM3Bc6x4MBuup5aetdi5pVTrGRG2aDAn0")
21+
!6 = !DIBasicType(name: "u7", size: 8, encoding: DW_ATE_unsigned)
22+
!7 = !{!8}
23+
!8 = !DIEnumerator(name: "armv8_5a", value: 0)
24+
!76 = !{!77}
25+
!77 = !DIGlobalVariableExpression(var: !78, expr: !DIExpression())
26+
!78 = distinct !DIGlobalVariable(name: "arch", linkageName: "arch", scope: !5, file: !5, line: 437, type: !4, isLocal: true, isDefinition: true)
27+
!81 = !DIFile(filename: "index.zig", directory: "/store/dev/zig/build-llvm8-debug/lib/zig/std/os/linux")
28+
!142 = distinct !DISubprogram(name: "init_vdso_clock_gettime", scope: !81, file: !81, line: 968, type: !143, scopeLine: 968, flags: DIFlagStaticMember, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !1, retainedNodes: !153)
29+
!143 = !DISubroutineType(types: !144)
30+
!144 = !{!145}
31+
!145 = !DIBasicType(name: "usize", size: 64, encoding: DW_ATE_unsigned)
32+
!146 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed)
33+
!153 = !{!154}
34+
!154 = !DILocalVariable(name: "clk", arg: 1, scope: !142, file: !81, line: 968, type: !146)
35+
!162 = !DILocalVariable(name: "f", scope: !163, file: !81, line: 970, type: !143)
36+
!163 = distinct !DILexicalBlock(scope: !164, file: !81, line: 969, column: 5)
37+
!164 = distinct !DILexicalBlock(scope: !165, file: !81, line: 968, column: 66)
38+
!165 = distinct !DILexicalBlock(scope: !166, file: !81, line: 968, column: 45)
39+
!166 = distinct !DILexicalBlock(scope: !142, file: !81, line: 968, column: 35)
40+
!167 = !DILocation(line: 970, column: 5, scope: !163)
41+
!168 = !DILocation(line: 972, column: 28, scope: !169)
42+
!169 = distinct !DILexicalBlock(scope: !163, file: !81, line: 970, column: 5)

0 commit comments

Comments
 (0)
Please sign in to comment.