mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[codeview] Fix crash when handling qualified void types
The DIType* for void is the null pointer. A null DIType can never be a qualified type, so we can just exit the loop at this point and go to getTypeIndex(BaseTy). Fixes PR27984 llvm-svn: 271550
This commit is contained in:
parent
73daadec96
commit
8877b80d1b
@ -914,8 +914,7 @@ TypeIndex CodeViewDebug::lowerTypeModifier(const DIDerivedType *Ty) {
|
||||
ModifierOptions Mods = ModifierOptions::None;
|
||||
bool IsModifier = true;
|
||||
const DIType *BaseTy = Ty;
|
||||
while (IsModifier) {
|
||||
assert(BaseTy);
|
||||
while (IsModifier && BaseTy) {
|
||||
// FIXME: Need to add DWARF tag for __unaligned.
|
||||
switch (BaseTy->getTag()) {
|
||||
case dwarf::DW_TAG_const_type:
|
||||
|
@ -18,6 +18,7 @@
|
||||
; long int l2 = 0;
|
||||
; unsigned long l3 = 0;
|
||||
; unsigned long int l4 = 0;
|
||||
; const void *v6 = &v1;
|
||||
; usevars(v1, v2, v3, l1, l2, l3, l4);
|
||||
; }
|
||||
; void CharTypes() {
|
||||
@ -116,6 +117,24 @@
|
||||
; CHECK: ClassType: 0x0
|
||||
; CHECK: Representation: Unknown (0x0)
|
||||
; CHECK: }
|
||||
; CHECK: Modifier (0x1009) {
|
||||
; CHECK: TypeLeafKind: LF_MODIFIER (0x1001)
|
||||
; CHECK: ModifiedType: void (0x3)
|
||||
; CHECK: Modifiers [ (0x1)
|
||||
; CHECK: Const (0x1)
|
||||
; CHECK: ]
|
||||
; CHECK: }
|
||||
; CHECK: Pointer (0x100A) {
|
||||
; CHECK: TypeLeafKind: LF_POINTER (0x1002)
|
||||
; CHECK: PointeeType: const void (0x1009)
|
||||
; CHECK: PointerAttributes: 0x1000C
|
||||
; CHECK: PtrType: Near64 (0xC)
|
||||
; CHECK: PtrMode: Pointer (0x0)
|
||||
; CHECK: IsFlat: 0
|
||||
; CHECK: IsConst: 0
|
||||
; CHECK: IsVolatile: 0
|
||||
; CHECK: IsUnaligned: 0
|
||||
; CHECK: }
|
||||
; CHECK: ]
|
||||
; CHECK: CodeViewDebugInfo [
|
||||
; CHECK: Subsection [
|
||||
@ -192,6 +211,10 @@
|
||||
; CHECK: Type: unsigned long (0x22)
|
||||
; CHECK: VarName: l4
|
||||
; CHECK: }
|
||||
; CHECK: Local {
|
||||
; CHECK: Type: const void* (0x100A)
|
||||
; CHECK: VarName: v6
|
||||
; CHECK: }
|
||||
; CHECK: ProcEnd {
|
||||
; CHECK: }
|
||||
; CHECK: ]
|
||||
@ -270,6 +293,7 @@ entry:
|
||||
%l2 = alloca i32, align 4
|
||||
%l3 = alloca i32, align 4
|
||||
%l4 = alloca i32, align 4
|
||||
%v6 = alloca i8*, align 8
|
||||
store i64 %p3, i64* %p3.addr, align 8
|
||||
call void @llvm.dbg.declare(metadata i64* %p3.addr, metadata !13, metadata !14), !dbg !15
|
||||
store double %p2, double* %p2.addr, align 8
|
||||
@ -299,15 +323,18 @@ entry:
|
||||
store i32 0, i32* %l3, align 4, !dbg !55
|
||||
call void @llvm.dbg.declare(metadata i32* %l4, metadata !56, metadata !14), !dbg !57
|
||||
store i32 0, i32* %l4, align 4, !dbg !57
|
||||
%2 = load i32, i32* %l4, align 4, !dbg !58
|
||||
%3 = load i32, i32* %l3, align 4, !dbg !59
|
||||
%4 = load i32, i32* %l2, align 4, !dbg !60
|
||||
%5 = load i32, i32* %l1, align 4, !dbg !61
|
||||
%6 = load i8*, i8** %v3, align 8, !dbg !62
|
||||
%7 = load i32*, i32** %v2, align 8, !dbg !63
|
||||
%8 = load i32, i32* %v1, align 4, !dbg !64
|
||||
call void (i32, ...) @"\01?usevars@@YAXHZZ"(i32 %8, i32* %7, i8* %6, i32 %5, i32 %4, i32 %3, i32 %2), !dbg !65
|
||||
ret void, !dbg !66
|
||||
call void @llvm.dbg.declare(metadata i8** %v6, metadata !58, metadata !14), !dbg !61
|
||||
%2 = bitcast i32* %v1 to i8*, !dbg !62
|
||||
store i8* %2, i8** %v6, align 8, !dbg !61
|
||||
%3 = load i32, i32* %l4, align 4, !dbg !63
|
||||
%4 = load i32, i32* %l3, align 4, !dbg !64
|
||||
%5 = load i32, i32* %l2, align 4, !dbg !65
|
||||
%6 = load i32, i32* %l1, align 4, !dbg !66
|
||||
%7 = load i8*, i8** %v3, align 8, !dbg !67
|
||||
%8 = load i32*, i32** %v2, align 8, !dbg !68
|
||||
%9 = load i32, i32* %v1, align 4, !dbg !69
|
||||
call void (i32, ...) @"\01?usevars@@YAXHZZ"(i32 %9, i32* %8, i8* %7, i32 %6, i32 %5, i32 %4, i32 %3), !dbg !70
|
||||
ret void, !dbg !71
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind readnone
|
||||
@ -318,7 +345,7 @@ declare void @"\01?f@A@@QEAAXXZ"(%struct.A*) #2
|
||||
declare void @"\01?usevars@@YAXHZZ"(i32, ...) #2
|
||||
|
||||
; Function Attrs: nounwind uwtable
|
||||
define void @"\01?CharTypes@@YAXXZ"() #3 !dbg !67 {
|
||||
define void @"\01?CharTypes@@YAXXZ"() #3 !dbg !72 {
|
||||
entry:
|
||||
%w = alloca i16, align 2
|
||||
%us = alloca i16, align 2
|
||||
@ -327,14 +354,14 @@ entry:
|
||||
%sc = alloca i8, align 1
|
||||
%c16 = alloca i16, align 2
|
||||
%c32 = alloca i32, align 4
|
||||
call void @llvm.dbg.declare(metadata i16* %w, metadata !70, metadata !14), !dbg !72
|
||||
call void @llvm.dbg.declare(metadata i16* %us, metadata !73, metadata !14), !dbg !75
|
||||
call void @llvm.dbg.declare(metadata i8* %c, metadata !76, metadata !14), !dbg !78
|
||||
call void @llvm.dbg.declare(metadata i8* %uc, metadata !79, metadata !14), !dbg !81
|
||||
call void @llvm.dbg.declare(metadata i8* %sc, metadata !82, metadata !14), !dbg !84
|
||||
call void @llvm.dbg.declare(metadata i16* %c16, metadata !85, metadata !14), !dbg !87
|
||||
call void @llvm.dbg.declare(metadata i32* %c32, metadata !88, metadata !14), !dbg !90
|
||||
ret void, !dbg !91
|
||||
call void @llvm.dbg.declare(metadata i16* %w, metadata !75, metadata !14), !dbg !77
|
||||
call void @llvm.dbg.declare(metadata i16* %us, metadata !78, metadata !14), !dbg !80
|
||||
call void @llvm.dbg.declare(metadata i8* %c, metadata !81, metadata !14), !dbg !83
|
||||
call void @llvm.dbg.declare(metadata i8* %uc, metadata !84, metadata !14), !dbg !86
|
||||
call void @llvm.dbg.declare(metadata i8* %sc, metadata !87, metadata !14), !dbg !89
|
||||
call void @llvm.dbg.declare(metadata i16* %c16, metadata !90, metadata !14), !dbg !92
|
||||
call void @llvm.dbg.declare(metadata i32* %c32, metadata !93, metadata !14), !dbg !95
|
||||
ret void, !dbg !96
|
||||
}
|
||||
|
||||
attributes #0 = { uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
||||
@ -346,13 +373,13 @@ attributes #3 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fp
|
||||
!llvm.module.flags = !{!3, !4, !5}
|
||||
!llvm.ident = !{!6}
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.9.0 (trunk 271336) (llvm/trunk 271339)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.9.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
|
||||
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
|
||||
!2 = !{}
|
||||
!3 = !{i32 2, !"CodeView", i32 1}
|
||||
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5 = !{i32 1, !"PIC Level", i32 2}
|
||||
!6 = !{!"clang version 3.9.0 (trunk 271336) (llvm/trunk 271339)"}
|
||||
!6 = !{!"clang version 3.9.0 "}
|
||||
!7 = distinct !DISubprogram(name: "f", linkageName: "\01?f@@YAXMN_J@Z", scope: !1, file: !1, line: 6, type: !8, isLocal: false, isDefinition: true, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!8 = !DISubroutineType(types: !9)
|
||||
!9 = !{null, !10, !11, !12}
|
||||
@ -404,37 +431,42 @@ attributes #3 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fp
|
||||
!55 = !DILocation(line: 15, column: 17, scope: !7)
|
||||
!56 = !DILocalVariable(name: "l4", scope: !7, file: !1, line: 16, type: !54)
|
||||
!57 = !DILocation(line: 16, column: 21, scope: !7)
|
||||
!58 = !DILocation(line: 17, column: 35, scope: !7)
|
||||
!59 = !DILocation(line: 17, column: 31, scope: !7)
|
||||
!60 = !DILocation(line: 17, column: 27, scope: !7)
|
||||
!61 = !DILocation(line: 17, column: 23, scope: !7)
|
||||
!62 = !DILocation(line: 17, column: 19, scope: !7)
|
||||
!63 = !DILocation(line: 17, column: 15, scope: !7)
|
||||
!64 = !DILocation(line: 17, column: 11, scope: !7)
|
||||
!65 = !DILocation(line: 17, column: 3, scope: !7)
|
||||
!66 = !DILocation(line: 18, column: 1, scope: !7)
|
||||
!67 = distinct !DISubprogram(name: "CharTypes", linkageName: "\01?CharTypes@@YAXXZ", scope: !1, file: !1, line: 19, type: !68, isLocal: false, isDefinition: true, scopeLine: 19, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!68 = !DISubroutineType(types: !69)
|
||||
!69 = !{null}
|
||||
!70 = !DILocalVariable(name: "w", scope: !67, file: !1, line: 20, type: !71)
|
||||
!71 = !DIBasicType(name: "wchar_t", size: 16, align: 16, encoding: DW_ATE_unsigned)
|
||||
!72 = !DILocation(line: 20, column: 18, scope: !67)
|
||||
!73 = !DILocalVariable(name: "us", scope: !67, file: !1, line: 21, type: !74)
|
||||
!74 = !DIBasicType(name: "unsigned short", size: 16, align: 16, encoding: DW_ATE_unsigned)
|
||||
!75 = !DILocation(line: 21, column: 18, scope: !67)
|
||||
!76 = !DILocalVariable(name: "c", scope: !67, file: !1, line: 22, type: !77)
|
||||
!77 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
|
||||
!78 = !DILocation(line: 22, column: 8, scope: !67)
|
||||
!79 = !DILocalVariable(name: "uc", scope: !67, file: !1, line: 23, type: !80)
|
||||
!80 = !DIBasicType(name: "unsigned char", size: 8, align: 8, encoding: DW_ATE_unsigned_char)
|
||||
!81 = !DILocation(line: 23, column: 17, scope: !67)
|
||||
!82 = !DILocalVariable(name: "sc", scope: !67, file: !1, line: 24, type: !83)
|
||||
!83 = !DIBasicType(name: "signed char", size: 8, align: 8, encoding: DW_ATE_signed_char)
|
||||
!84 = !DILocation(line: 24, column: 15, scope: !67)
|
||||
!85 = !DILocalVariable(name: "c16", scope: !67, file: !1, line: 25, type: !86)
|
||||
!86 = !DIBasicType(name: "char16_t", size: 16, align: 16, encoding: DW_ATE_UTF)
|
||||
!87 = !DILocation(line: 25, column: 12, scope: !67)
|
||||
!88 = !DILocalVariable(name: "c32", scope: !67, file: !1, line: 26, type: !89)
|
||||
!89 = !DIBasicType(name: "char32_t", size: 32, align: 32, encoding: DW_ATE_UTF)
|
||||
!90 = !DILocation(line: 26, column: 12, scope: !67)
|
||||
!91 = !DILocation(line: 27, column: 1, scope: !67)
|
||||
!58 = !DILocalVariable(name: "v6", scope: !7, file: !1, line: 17, type: !59)
|
||||
!59 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !60, size: 64, align: 64)
|
||||
!60 = !DIDerivedType(tag: DW_TAG_const_type, baseType: null)
|
||||
!61 = !DILocation(line: 17, column: 15, scope: !7)
|
||||
!62 = !DILocation(line: 17, column: 20, scope: !7)
|
||||
!63 = !DILocation(line: 18, column: 35, scope: !7)
|
||||
!64 = !DILocation(line: 18, column: 31, scope: !7)
|
||||
!65 = !DILocation(line: 18, column: 27, scope: !7)
|
||||
!66 = !DILocation(line: 18, column: 23, scope: !7)
|
||||
!67 = !DILocation(line: 18, column: 19, scope: !7)
|
||||
!68 = !DILocation(line: 18, column: 15, scope: !7)
|
||||
!69 = !DILocation(line: 18, column: 11, scope: !7)
|
||||
!70 = !DILocation(line: 18, column: 3, scope: !7)
|
||||
!71 = !DILocation(line: 19, column: 1, scope: !7)
|
||||
!72 = distinct !DISubprogram(name: "CharTypes", linkageName: "\01?CharTypes@@YAXXZ", scope: !1, file: !1, line: 20, type: !73, isLocal: false, isDefinition: true, scopeLine: 20, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
|
||||
!73 = !DISubroutineType(types: !74)
|
||||
!74 = !{null}
|
||||
!75 = !DILocalVariable(name: "w", scope: !72, file: !1, line: 21, type: !76)
|
||||
!76 = !DIBasicType(name: "wchar_t", size: 16, align: 16, encoding: DW_ATE_unsigned)
|
||||
!77 = !DILocation(line: 21, column: 18, scope: !72)
|
||||
!78 = !DILocalVariable(name: "us", scope: !72, file: !1, line: 22, type: !79)
|
||||
!79 = !DIBasicType(name: "unsigned short", size: 16, align: 16, encoding: DW_ATE_unsigned)
|
||||
!80 = !DILocation(line: 22, column: 18, scope: !72)
|
||||
!81 = !DILocalVariable(name: "c", scope: !72, file: !1, line: 23, type: !82)
|
||||
!82 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
|
||||
!83 = !DILocation(line: 23, column: 8, scope: !72)
|
||||
!84 = !DILocalVariable(name: "uc", scope: !72, file: !1, line: 24, type: !85)
|
||||
!85 = !DIBasicType(name: "unsigned char", size: 8, align: 8, encoding: DW_ATE_unsigned_char)
|
||||
!86 = !DILocation(line: 24, column: 17, scope: !72)
|
||||
!87 = !DILocalVariable(name: "sc", scope: !72, file: !1, line: 25, type: !88)
|
||||
!88 = !DIBasicType(name: "signed char", size: 8, align: 8, encoding: DW_ATE_signed_char)
|
||||
!89 = !DILocation(line: 25, column: 15, scope: !72)
|
||||
!90 = !DILocalVariable(name: "c16", scope: !72, file: !1, line: 26, type: !91)
|
||||
!91 = !DIBasicType(name: "char16_t", size: 16, align: 16, encoding: DW_ATE_UTF)
|
||||
!92 = !DILocation(line: 26, column: 12, scope: !72)
|
||||
!93 = !DILocalVariable(name: "c32", scope: !72, file: !1, line: 27, type: !94)
|
||||
!94 = !DIBasicType(name: "char32_t", size: 32, align: 32, encoding: DW_ATE_UTF)
|
||||
!95 = !DILocation(line: 27, column: 12, scope: !72)
|
||||
!96 = !DILocation(line: 28, column: 1, scope: !72)
|
||||
|
Loading…
x
Reference in New Issue
Block a user