mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-04 17:51:05 +01:00
return 0 from Run when it doesn't specify a return value (#7180)
https://carbon.compiler-explorer.com/z/88K9Kh5Wo shows the program exiting with a garbage value copied from uninitialized memory. This PR modifies `lower` to detect if the function lowered is the entry point and doesn't specify a return type. If so, it emits different LLVM IR to return int32 0, and modifies the lowered function signature to match the int32 return type.
This commit is contained in:
@@ -53,27 +53,27 @@ fn Run() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @main() #0 !dbg !12 {
|
||||
// CHECK:STDOUT: define i32 @main() #0 !dbg !12 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: call void @_CG.Main.e55c78367db83a6b(), !dbg !13
|
||||
// CHECK:STDOUT: call void @_CG.Main.95a632fb0c368a62(), !dbg !14
|
||||
// CHECK:STDOUT: ret void, !dbg !15
|
||||
// CHECK:STDOUT: call void @_CG.Main.e55c78367db83a6b(), !dbg !16
|
||||
// CHECK:STDOUT: call void @_CG.Main.95a632fb0c368a62(), !dbg !17
|
||||
// CHECK:STDOUT: ret i32 0, !dbg !18
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: declare i32 @printf(ptr, ...)
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define linkonce_odr void @_CG.Main.e55c78367db83a6b() #0 !dbg !16 {
|
||||
// CHECK:STDOUT: define linkonce_odr void @_CG.Main.e55c78367db83a6b() #0 !dbg !19 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: call void @"_CF.X.Main:I.Main"(), !dbg !17
|
||||
// CHECK:STDOUT: ret void, !dbg !18
|
||||
// CHECK:STDOUT: call void @"_CF.X.Main:I.Main"(), !dbg !20
|
||||
// CHECK:STDOUT: ret void, !dbg !21
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define linkonce_odr void @_CG.Main.95a632fb0c368a62() #0 !dbg !19 {
|
||||
// CHECK:STDOUT: define linkonce_odr void @_CG.Main.95a632fb0c368a62() #0 !dbg !22 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: call void @"_CF.Y.Main:I.Main"(), !dbg !20
|
||||
// CHECK:STDOUT: ret void, !dbg !21
|
||||
// CHECK:STDOUT: call void @"_CF.Y.Main:I.Main"(), !dbg !23
|
||||
// CHECK:STDOUT: ret void, !dbg !24
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; uselistorder directives
|
||||
@@ -96,13 +96,16 @@ fn Run() {
|
||||
// CHECK:STDOUT: !9 = distinct !DISubprogram(name: "F", linkageName: "_CF.Y.Main:I.Main", scope: null, file: !3, line: 24, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !10 = !DILocation(line: 24, column: 12, scope: !9)
|
||||
// CHECK:STDOUT: !11 = !DILocation(line: 24, column: 3, scope: !9)
|
||||
// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 31, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !13 = !DILocation(line: 32, column: 3, scope: !12)
|
||||
// CHECK:STDOUT: !14 = !DILocation(line: 33, column: 3, scope: !12)
|
||||
// CHECK:STDOUT: !15 = !DILocation(line: 31, column: 1, scope: !12)
|
||||
// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.e55c78367db83a6b", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !17 = !DILocation(line: 29, column: 15, scope: !16)
|
||||
// CHECK:STDOUT: !18 = !DILocation(line: 29, column: 1, scope: !16)
|
||||
// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.95a632fb0c368a62", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 31, type: !13, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !13 = !DISubroutineType(types: !14)
|
||||
// CHECK:STDOUT: !14 = !{!15}
|
||||
// CHECK:STDOUT: !15 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
// CHECK:STDOUT: !16 = !DILocation(line: 32, column: 3, scope: !12)
|
||||
// CHECK:STDOUT: !17 = !DILocation(line: 33, column: 3, scope: !12)
|
||||
// CHECK:STDOUT: !18 = !DILocation(line: 31, column: 1, scope: !12)
|
||||
// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.e55c78367db83a6b", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !20 = !DILocation(line: 29, column: 15, scope: !19)
|
||||
// CHECK:STDOUT: !21 = !DILocation(line: 29, column: 1, scope: !19)
|
||||
// CHECK:STDOUT: !22 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.95a632fb0c368a62", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !23 = !DILocation(line: 29, column: 15, scope: !22)
|
||||
// CHECK:STDOUT: !24 = !DILocation(line: 29, column: 1, scope: !22)
|
||||
|
||||
+15
-15
@@ -68,17 +68,17 @@ fn Run() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @main() #0 !dbg !22 {
|
||||
// CHECK:STDOUT: define i32 @main() #0 !dbg !22 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: call void @_CG.Main.27a852a6bab6ed2e(), !dbg !25
|
||||
// CHECK:STDOUT: call void @_CG.Main.2de7c972fe093485(), !dbg !26
|
||||
// CHECK:STDOUT: ret void, !dbg !27
|
||||
// CHECK:STDOUT: call void @_CG.Main.27a852a6bab6ed2e(), !dbg !23
|
||||
// CHECK:STDOUT: call void @_CG.Main.2de7c972fe093485(), !dbg !24
|
||||
// CHECK:STDOUT: ret i32 0, !dbg !25
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: declare i32 @printf(ptr, ...)
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define linkonce_odr void @_CG.Main.27a852a6bab6ed2e() #0 !dbg !28 {
|
||||
// CHECK:STDOUT: define linkonce_odr void @_CG.Main.27a852a6bab6ed2e() #0 !dbg !26 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: %.loc37_20.1.temp = alloca i1, align 1, !dbg !29
|
||||
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc37_20.1.temp), !dbg !29
|
||||
@@ -137,15 +137,15 @@ fn Run() {
|
||||
// CHECK:STDOUT: !19 = !{!13}
|
||||
// CHECK:STDOUT: !20 = !DILocation(line: 29, column: 5, scope: !17)
|
||||
// CHECK:STDOUT: !21 = !DILocation(line: 30, column: 5, scope: !17)
|
||||
// CHECK:STDOUT: !22 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 40, type: !23, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !23 = !DISubroutineType(types: !24)
|
||||
// CHECK:STDOUT: !24 = !{null}
|
||||
// CHECK:STDOUT: !25 = !DILocation(line: 41, column: 3, scope: !22)
|
||||
// CHECK:STDOUT: !26 = !DILocation(line: 42, column: 3, scope: !22)
|
||||
// CHECK:STDOUT: !27 = !DILocation(line: 40, column: 1, scope: !22)
|
||||
// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.27a852a6bab6ed2e", scope: null, file: !3, line: 36, type: !23, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !29 = !DILocation(line: 37, column: 16, scope: !28)
|
||||
// CHECK:STDOUT: !30 = !DILocation(line: 36, column: 1, scope: !28)
|
||||
// CHECK:STDOUT: !31 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.2de7c972fe093485", scope: null, file: !3, line: 36, type: !23, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !22 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 40, type: !18, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !23 = !DILocation(line: 41, column: 3, scope: !22)
|
||||
// CHECK:STDOUT: !24 = !DILocation(line: 42, column: 3, scope: !22)
|
||||
// CHECK:STDOUT: !25 = !DILocation(line: 40, column: 1, scope: !22)
|
||||
// CHECK:STDOUT: !26 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.27a852a6bab6ed2e", scope: null, file: !3, line: 36, type: !27, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !27 = !DISubroutineType(types: !28)
|
||||
// CHECK:STDOUT: !28 = !{null}
|
||||
// CHECK:STDOUT: !29 = !DILocation(line: 37, column: 16, scope: !26)
|
||||
// CHECK:STDOUT: !30 = !DILocation(line: 36, column: 1, scope: !26)
|
||||
// CHECK:STDOUT: !31 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.2de7c972fe093485", scope: null, file: !3, line: 36, type: !27, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !32 = !DILocation(line: 37, column: 16, scope: !31)
|
||||
// CHECK:STDOUT: !33 = !DILocation(line: 36, column: 1, scope: !31)
|
||||
|
||||
@@ -61,45 +61,45 @@ fn Run() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @main() #0 !dbg !12 {
|
||||
// CHECK:STDOUT: define i32 @main() #0 !dbg !12 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: %G.call.loc40 = call i32 @_CG.Main.e55c78367db83a6b(i32 0), !dbg !13
|
||||
// CHECK:STDOUT: %G.call.loc41 = call i32 @_CG.Main.95a632fb0c368a62(i32 0), !dbg !14
|
||||
// CHECK:STDOUT: ret void, !dbg !15
|
||||
// CHECK:STDOUT: %G.call.loc40 = call i32 @_CG.Main.e55c78367db83a6b(i32 0), !dbg !16
|
||||
// CHECK:STDOUT: %G.call.loc41 = call i32 @_CG.Main.95a632fb0c368a62(i32 0), !dbg !17
|
||||
// CHECK:STDOUT: ret i32 0, !dbg !18
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: declare i32 @printf(ptr, ...)
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.e55c78367db83a6b(i32 %count) #0 !dbg !16 {
|
||||
// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.e55c78367db83a6b(i32 %count) #0 !dbg !19 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: call void @"_CF.X.Main:I.Main"(), !dbg !22
|
||||
// CHECK:STDOUT: %Int.as.OrderedWith.impl.Greater.call = icmp sgt i32 %count, 0, !dbg !23
|
||||
// CHECK:STDOUT: br i1 %Int.as.OrderedWith.impl.Greater.call, label %if.then, label %if.else, !dbg !24
|
||||
// CHECK:STDOUT: call void @"_CF.X.Main:I.Main"(), !dbg !24
|
||||
// CHECK:STDOUT: %Int.as.OrderedWith.impl.Greater.call = icmp sgt i32 %count, 0, !dbg !25
|
||||
// CHECK:STDOUT: br i1 %Int.as.OrderedWith.impl.Greater.call, label %if.then, label %if.else, !dbg !26
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: if.then: ; preds = %entry
|
||||
// CHECK:STDOUT: ret i32 %count, !dbg !25
|
||||
// CHECK:STDOUT: ret i32 %count, !dbg !27
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: if.else: ; preds = %entry
|
||||
// CHECK:STDOUT: %Int.as.AddWith.impl.Op.call = add i32 %count, 1, !dbg !26
|
||||
// CHECK:STDOUT: %G.call = call i32 @_CG.Main.e55c78367db83a6b(i32 %Int.as.AddWith.impl.Op.call), !dbg !27
|
||||
// CHECK:STDOUT: ret i32 %G.call, !dbg !28
|
||||
// CHECK:STDOUT: %Int.as.AddWith.impl.Op.call = add i32 %count, 1, !dbg !28
|
||||
// CHECK:STDOUT: %G.call = call i32 @_CG.Main.e55c78367db83a6b(i32 %Int.as.AddWith.impl.Op.call), !dbg !29
|
||||
// CHECK:STDOUT: ret i32 %G.call, !dbg !30
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.95a632fb0c368a62(i32 %count) #0 !dbg !29 {
|
||||
// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.95a632fb0c368a62(i32 %count) #0 !dbg !31 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: call void @"_CF.Y.Main:I.Main"(), !dbg !32
|
||||
// CHECK:STDOUT: %Int.as.OrderedWith.impl.Greater.call = icmp sgt i32 %count, 0, !dbg !33
|
||||
// CHECK:STDOUT: br i1 %Int.as.OrderedWith.impl.Greater.call, label %if.then, label %if.else, !dbg !34
|
||||
// CHECK:STDOUT: call void @"_CF.Y.Main:I.Main"(), !dbg !34
|
||||
// CHECK:STDOUT: %Int.as.OrderedWith.impl.Greater.call = icmp sgt i32 %count, 0, !dbg !35
|
||||
// CHECK:STDOUT: br i1 %Int.as.OrderedWith.impl.Greater.call, label %if.then, label %if.else, !dbg !36
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: if.then: ; preds = %entry
|
||||
// CHECK:STDOUT: ret i32 %count, !dbg !35
|
||||
// CHECK:STDOUT: ret i32 %count, !dbg !37
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: if.else: ; preds = %entry
|
||||
// CHECK:STDOUT: %Int.as.AddWith.impl.Op.call = add i32 %count, 1, !dbg !36
|
||||
// CHECK:STDOUT: %G.call = call i32 @_CG.Main.95a632fb0c368a62(i32 %Int.as.AddWith.impl.Op.call), !dbg !37
|
||||
// CHECK:STDOUT: ret i32 %G.call, !dbg !38
|
||||
// CHECK:STDOUT: %Int.as.AddWith.impl.Op.call = add i32 %count, 1, !dbg !38
|
||||
// CHECK:STDOUT: %G.call = call i32 @_CG.Main.95a632fb0c368a62(i32 %Int.as.AddWith.impl.Op.call), !dbg !39
|
||||
// CHECK:STDOUT: ret i32 %G.call, !dbg !40
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; uselistorder directives
|
||||
@@ -122,30 +122,32 @@ fn Run() {
|
||||
// CHECK:STDOUT: !9 = distinct !DISubprogram(name: "F", linkageName: "_CF.Y.Main:I.Main", scope: null, file: !3, line: 24, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !10 = !DILocation(line: 24, column: 12, scope: !9)
|
||||
// CHECK:STDOUT: !11 = !DILocation(line: 24, column: 3, scope: !9)
|
||||
// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 39, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !13 = !DILocation(line: 40, column: 3, scope: !12)
|
||||
// CHECK:STDOUT: !14 = !DILocation(line: 41, column: 3, scope: !12)
|
||||
// CHECK:STDOUT: !15 = !DILocation(line: 39, column: 1, scope: !12)
|
||||
// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.e55c78367db83a6b", scope: null, file: !3, line: 30, type: !17, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !20)
|
||||
// CHECK:STDOUT: !17 = !DISubroutineType(types: !18)
|
||||
// CHECK:STDOUT: !18 = !{!19, !19}
|
||||
// CHECK:STDOUT: !19 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
// CHECK:STDOUT: !20 = !{!21}
|
||||
// CHECK:STDOUT: !21 = !DILocalVariable(arg: 1, scope: !16, type: !19)
|
||||
// CHECK:STDOUT: !22 = !DILocation(line: 31, column: 3, scope: !16)
|
||||
// CHECK:STDOUT: !23 = !DILocation(line: 33, column: 7, scope: !16)
|
||||
// CHECK:STDOUT: !24 = !DILocation(line: 33, column: 6, scope: !16)
|
||||
// CHECK:STDOUT: !25 = !DILocation(line: 34, column: 5, scope: !16)
|
||||
// CHECK:STDOUT: !26 = !DILocation(line: 36, column: 15, scope: !16)
|
||||
// CHECK:STDOUT: !27 = !DILocation(line: 36, column: 10, scope: !16)
|
||||
// CHECK:STDOUT: !28 = !DILocation(line: 36, column: 3, scope: !16)
|
||||
// CHECK:STDOUT: !29 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.95a632fb0c368a62", scope: null, file: !3, line: 30, type: !17, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !30)
|
||||
// CHECK:STDOUT: !30 = !{!31}
|
||||
// CHECK:STDOUT: !31 = !DILocalVariable(arg: 1, scope: !29, type: !19)
|
||||
// CHECK:STDOUT: !32 = !DILocation(line: 31, column: 3, scope: !29)
|
||||
// CHECK:STDOUT: !33 = !DILocation(line: 33, column: 7, scope: !29)
|
||||
// CHECK:STDOUT: !34 = !DILocation(line: 33, column: 6, scope: !29)
|
||||
// CHECK:STDOUT: !35 = !DILocation(line: 34, column: 5, scope: !29)
|
||||
// CHECK:STDOUT: !36 = !DILocation(line: 36, column: 15, scope: !29)
|
||||
// CHECK:STDOUT: !37 = !DILocation(line: 36, column: 10, scope: !29)
|
||||
// CHECK:STDOUT: !38 = !DILocation(line: 36, column: 3, scope: !29)
|
||||
// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 39, type: !13, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !13 = !DISubroutineType(types: !14)
|
||||
// CHECK:STDOUT: !14 = !{!15}
|
||||
// CHECK:STDOUT: !15 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
// CHECK:STDOUT: !16 = !DILocation(line: 40, column: 3, scope: !12)
|
||||
// CHECK:STDOUT: !17 = !DILocation(line: 41, column: 3, scope: !12)
|
||||
// CHECK:STDOUT: !18 = !DILocation(line: 39, column: 1, scope: !12)
|
||||
// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.e55c78367db83a6b", scope: null, file: !3, line: 30, type: !20, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !22)
|
||||
// CHECK:STDOUT: !20 = !DISubroutineType(types: !21)
|
||||
// CHECK:STDOUT: !21 = !{!15, !15}
|
||||
// CHECK:STDOUT: !22 = !{!23}
|
||||
// CHECK:STDOUT: !23 = !DILocalVariable(arg: 1, scope: !19, type: !15)
|
||||
// CHECK:STDOUT: !24 = !DILocation(line: 31, column: 3, scope: !19)
|
||||
// CHECK:STDOUT: !25 = !DILocation(line: 33, column: 7, scope: !19)
|
||||
// CHECK:STDOUT: !26 = !DILocation(line: 33, column: 6, scope: !19)
|
||||
// CHECK:STDOUT: !27 = !DILocation(line: 34, column: 5, scope: !19)
|
||||
// CHECK:STDOUT: !28 = !DILocation(line: 36, column: 15, scope: !19)
|
||||
// CHECK:STDOUT: !29 = !DILocation(line: 36, column: 10, scope: !19)
|
||||
// CHECK:STDOUT: !30 = !DILocation(line: 36, column: 3, scope: !19)
|
||||
// CHECK:STDOUT: !31 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.95a632fb0c368a62", scope: null, file: !3, line: 30, type: !20, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !32)
|
||||
// CHECK:STDOUT: !32 = !{!33}
|
||||
// CHECK:STDOUT: !33 = !DILocalVariable(arg: 1, scope: !31, type: !15)
|
||||
// CHECK:STDOUT: !34 = !DILocation(line: 31, column: 3, scope: !31)
|
||||
// CHECK:STDOUT: !35 = !DILocation(line: 33, column: 7, scope: !31)
|
||||
// CHECK:STDOUT: !36 = !DILocation(line: 33, column: 6, scope: !31)
|
||||
// CHECK:STDOUT: !37 = !DILocation(line: 34, column: 5, scope: !31)
|
||||
// CHECK:STDOUT: !38 = !DILocation(line: 36, column: 15, scope: !31)
|
||||
// CHECK:STDOUT: !39 = !DILocation(line: 36, column: 10, scope: !31)
|
||||
// CHECK:STDOUT: !40 = !DILocation(line: 36, column: 3, scope: !31)
|
||||
|
||||
+24
-24
@@ -75,15 +75,15 @@ fn Run() {
|
||||
// CHECK:STDOUT: source_filename = "todo_use.carbon"
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @main() #0 !dbg !4 {
|
||||
// CHECK:STDOUT: define i32 @main() #0 !dbg !4 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: %Lib1CallF.call = call i32 @_CLib1CallF.Main.2382f01eaa053e7b(i32 1, i32 2), !dbg !7
|
||||
// CHECK:STDOUT: %Lib2CallF.call = call i32 @_CLib2CallF.Main.2382f01eaa053e7b(i32 1, i32 2), !dbg !8
|
||||
// CHECK:STDOUT: ret void, !dbg !9
|
||||
// CHECK:STDOUT: %Lib1CallF.call = call i32 @_CLib1CallF.Main.2382f01eaa053e7b(i32 1, i32 2), !dbg !8
|
||||
// CHECK:STDOUT: %Lib2CallF.call = call i32 @_CLib2CallF.Main.2382f01eaa053e7b(i32 1, i32 2), !dbg !9
|
||||
// CHECK:STDOUT: ret i32 0, !dbg !10
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define linkonce_odr i32 @_CLib1CallF.Main.2382f01eaa053e7b(i32 %a, i32 %b) #0 !dbg !10 {
|
||||
// CHECK:STDOUT: define linkonce_odr i32 @_CLib1CallF.Main.2382f01eaa053e7b(i32 %a, i32 %b) #0 !dbg !11 {
|
||||
// CHECK:STDOUT: %1 = call i32 @_CF.Main.2382f01eaa053e7b(i32 %a, i32 %b), !dbg !18
|
||||
// CHECK:STDOUT: ret i32 %1, !dbg !19
|
||||
// CHECK:STDOUT: }
|
||||
@@ -113,29 +113,29 @@ fn Run() {
|
||||
// CHECK:STDOUT: !3 = !DIFile(filename: "todo_use.carbon", directory: "")
|
||||
// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 9, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
|
||||
// CHECK:STDOUT: !6 = !{null}
|
||||
// CHECK:STDOUT: !7 = !DILocation(line: 10, column: 16, scope: !4)
|
||||
// CHECK:STDOUT: !8 = !DILocation(line: 11, column: 16, scope: !4)
|
||||
// CHECK:STDOUT: !9 = !DILocation(line: 9, column: 1, scope: !4)
|
||||
// CHECK:STDOUT: !10 = distinct !DISubprogram(name: "Lib1CallF", linkageName: "_CLib1CallF.Main.2382f01eaa053e7b", scope: null, file: !11, line: 8, type: !12, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !15)
|
||||
// CHECK:STDOUT: !11 = !DIFile(filename: "lib1.carbon", directory: "")
|
||||
// CHECK:STDOUT: !12 = !DISubroutineType(types: !13)
|
||||
// CHECK:STDOUT: !13 = !{!14, !14, !14}
|
||||
// CHECK:STDOUT: !14 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
// CHECK:STDOUT: !6 = !{!7}
|
||||
// CHECK:STDOUT: !7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
// CHECK:STDOUT: !8 = !DILocation(line: 10, column: 16, scope: !4)
|
||||
// CHECK:STDOUT: !9 = !DILocation(line: 11, column: 16, scope: !4)
|
||||
// CHECK:STDOUT: !10 = !DILocation(line: 9, column: 1, scope: !4)
|
||||
// CHECK:STDOUT: !11 = distinct !DISubprogram(name: "Lib1CallF", linkageName: "_CLib1CallF.Main.2382f01eaa053e7b", scope: null, file: !12, line: 8, type: !13, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !15)
|
||||
// CHECK:STDOUT: !12 = !DIFile(filename: "lib1.carbon", directory: "")
|
||||
// CHECK:STDOUT: !13 = !DISubroutineType(types: !14)
|
||||
// CHECK:STDOUT: !14 = !{!7, !7, !7}
|
||||
// CHECK:STDOUT: !15 = !{!16, !17}
|
||||
// CHECK:STDOUT: !16 = !DILocalVariable(arg: 1, scope: !10, type: !14)
|
||||
// CHECK:STDOUT: !17 = !DILocalVariable(arg: 2, scope: !10, type: !14)
|
||||
// CHECK:STDOUT: !18 = !DILocation(line: 9, column: 10, scope: !10)
|
||||
// CHECK:STDOUT: !19 = !DILocation(line: 9, column: 3, scope: !10)
|
||||
// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "Lib2CallF", linkageName: "_CLib2CallF.Main.2382f01eaa053e7b", scope: null, file: !21, line: 11, type: !12, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !22)
|
||||
// CHECK:STDOUT: !16 = !DILocalVariable(arg: 1, scope: !11, type: !7)
|
||||
// CHECK:STDOUT: !17 = !DILocalVariable(arg: 2, scope: !11, type: !7)
|
||||
// CHECK:STDOUT: !18 = !DILocation(line: 9, column: 10, scope: !11)
|
||||
// CHECK:STDOUT: !19 = !DILocation(line: 9, column: 3, scope: !11)
|
||||
// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "Lib2CallF", linkageName: "_CLib2CallF.Main.2382f01eaa053e7b", scope: null, file: !21, line: 11, type: !13, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !22)
|
||||
// CHECK:STDOUT: !21 = !DIFile(filename: "lib2.carbon", directory: "")
|
||||
// CHECK:STDOUT: !22 = !{!23, !24}
|
||||
// CHECK:STDOUT: !23 = !DILocalVariable(arg: 1, scope: !20, type: !14)
|
||||
// CHECK:STDOUT: !24 = !DILocalVariable(arg: 2, scope: !20, type: !14)
|
||||
// CHECK:STDOUT: !23 = !DILocalVariable(arg: 1, scope: !20, type: !7)
|
||||
// CHECK:STDOUT: !24 = !DILocalVariable(arg: 2, scope: !20, type: !7)
|
||||
// CHECK:STDOUT: !25 = !DILocation(line: 12, column: 10, scope: !20)
|
||||
// CHECK:STDOUT: !26 = !DILocation(line: 12, column: 3, scope: !20)
|
||||
// CHECK:STDOUT: !27 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.2382f01eaa053e7b", scope: null, file: !11, line: 4, type: !12, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !28)
|
||||
// CHECK:STDOUT: !27 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.2382f01eaa053e7b", scope: null, file: !12, line: 4, type: !13, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !28)
|
||||
// CHECK:STDOUT: !28 = !{!29, !30}
|
||||
// CHECK:STDOUT: !29 = !DILocalVariable(arg: 1, scope: !27, type: !14)
|
||||
// CHECK:STDOUT: !30 = !DILocalVariable(arg: 2, scope: !27, type: !14)
|
||||
// CHECK:STDOUT: !29 = !DILocalVariable(arg: 1, scope: !27, type: !7)
|
||||
// CHECK:STDOUT: !30 = !DILocalVariable(arg: 2, scope: !27, type: !7)
|
||||
// CHECK:STDOUT: !31 = !DILocation(line: 5, column: 3, scope: !27)
|
||||
|
||||
@@ -57,19 +57,19 @@ fn Run() {
|
||||
// CHECK:STDOUT: source_filename = "main.carbon"
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @main() #0 !dbg !4 {
|
||||
// CHECK:STDOUT: define i32 @main() #0 !dbg !4 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: call void @_CF.Main.ea4dcbbefe9f139a(), !dbg !7
|
||||
// CHECK:STDOUT: ret void, !dbg !8
|
||||
// CHECK:STDOUT: call void @_CF.Main.ea4dcbbefe9f139a(), !dbg !8
|
||||
// CHECK:STDOUT: ret i32 0, !dbg !9
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.ea4dcbbefe9f139a() #0 !dbg !9 {
|
||||
// CHECK:STDOUT: %1 = alloca i32, align 4, !dbg !11
|
||||
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %1), !dbg !11
|
||||
// CHECK:STDOUT: store i32 0, ptr %1, align 4, !dbg !11
|
||||
// CHECK:STDOUT: call void @"_COp.7e389eab4a7e5487:core.Destroy.Core"(ptr %1), !dbg !11
|
||||
// CHECK:STDOUT: ret void, !dbg !12
|
||||
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.ea4dcbbefe9f139a() #0 !dbg !10 {
|
||||
// CHECK:STDOUT: %1 = alloca i32, align 4, !dbg !14
|
||||
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %1), !dbg !14
|
||||
// CHECK:STDOUT: store i32 0, ptr %1, align 4, !dbg !14
|
||||
// CHECK:STDOUT: call void @"_COp.7e389eab4a7e5487:core.Destroy.Core"(ptr %1), !dbg !14
|
||||
// CHECK:STDOUT: ret void, !dbg !15
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: declare void @"_COp.7e389eab4a7e5487:core.Destroy.Core"(ptr)
|
||||
@@ -89,10 +89,13 @@ fn Run() {
|
||||
// CHECK:STDOUT: !3 = !DIFile(filename: "main.carbon", directory: "")
|
||||
// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 4, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
|
||||
// CHECK:STDOUT: !6 = !{null}
|
||||
// CHECK:STDOUT: !7 = !DILocation(line: 5, column: 3, scope: !4)
|
||||
// CHECK:STDOUT: !8 = !DILocation(line: 4, column: 1, scope: !4)
|
||||
// CHECK:STDOUT: !9 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.ea4dcbbefe9f139a", scope: null, file: !10, line: 4, type: !5, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !10 = !DIFile(filename: "lib.carbon", directory: "")
|
||||
// CHECK:STDOUT: !11 = !DILocation(line: 7, column: 3, scope: !9)
|
||||
// CHECK:STDOUT: !12 = !DILocation(line: 4, column: 1, scope: !9)
|
||||
// CHECK:STDOUT: !6 = !{!7}
|
||||
// CHECK:STDOUT: !7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
// CHECK:STDOUT: !8 = !DILocation(line: 5, column: 3, scope: !4)
|
||||
// CHECK:STDOUT: !9 = !DILocation(line: 4, column: 1, scope: !4)
|
||||
// CHECK:STDOUT: !10 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.ea4dcbbefe9f139a", scope: null, file: !11, line: 4, type: !12, spFlags: DISPFlagDefinition, unit: !2)
|
||||
// CHECK:STDOUT: !11 = !DIFile(filename: "lib.carbon", directory: "")
|
||||
// CHECK:STDOUT: !12 = !DISubroutineType(types: !13)
|
||||
// CHECK:STDOUT: !13 = !{null}
|
||||
// CHECK:STDOUT: !14 = !DILocation(line: 7, column: 3, scope: !10)
|
||||
// CHECK:STDOUT: !15 = !DILocation(line: 4, column: 1, scope: !10)
|
||||
|
||||
Reference in New Issue
Block a user