mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-06 09:14:42 +01:00
Propagate Carbon type alignments into LLVM IR. (#7290)
Use the Carbon-computed alignment for allocas, loads, stores, and memcpys. Previously we used whatever LLVM felt like giving us, which would result in ABI mismatches and runtime crashes due to misalignment when creating objects of imported C++ class types, as well as resulting in some surprising choices like `(i32, i32)` and `()` having 8-byte alignment instead of 4 and 1, respectively.
This commit is contained in:
+9
-9
@@ -179,7 +179,7 @@ fn Four() {
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @_CF.Main() #0 !dbg !11 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: %.loc7_26.1.temp = alloca [8 x i8], align 1, !dbg !14
|
||||
// CHECK:STDOUT: %.loc7_26.1.temp = alloca [8 x i8], align 4, !dbg !14
|
||||
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc7_26.1.temp), !dbg !14
|
||||
// CHECK:STDOUT: call void @_ZN1CC1Ev.carbon_thunk.(ptr %.loc7_26.1.temp), !dbg !14
|
||||
// CHECK:STDOUT: ret void, !dbg !15
|
||||
@@ -198,7 +198,7 @@ fn Four() {
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @_CG.Main() #0 !dbg !19 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: %.loc11_19.2.temp = alloca [8 x i8], align 1, !dbg !20
|
||||
// CHECK:STDOUT: %.loc11_19.2.temp = alloca [8 x i8], align 4, !dbg !20
|
||||
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc11_19.2.temp), !dbg !20
|
||||
// CHECK:STDOUT: call void @_ZN1CC1Ev.carbon_thunk_tuple.(ptr %.loc11_19.2.temp), !dbg !20
|
||||
// CHECK:STDOUT: ret void, !dbg !21
|
||||
@@ -279,7 +279,7 @@ fn Four() {
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @_CF.Main() #0 !dbg !11 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: %_.var = alloca [8 x i8], align 1, !dbg !14
|
||||
// CHECK:STDOUT: %_.var = alloca [8 x i8], align 4, !dbg !14
|
||||
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !14
|
||||
// CHECK:STDOUT: call void @"_COp.cbe5dd53b28eb3d1:DefaultOrUnformed.Core.4fdc745d4b6d0e3c"(ptr %_.var), !dbg !14
|
||||
// CHECK:STDOUT: ret void, !dbg !15
|
||||
@@ -381,10 +381,10 @@ fn Four() {
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @_CF.Main() #0 !dbg !11 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: %.loc8_65.1.temp = alloca [4 x i8], align 1, !dbg !14
|
||||
// CHECK:STDOUT: %_.var.loc9 = alloca [4 x i8], align 1, !dbg !15
|
||||
// CHECK:STDOUT: %.loc12_65.1.temp = alloca [4 x i8], align 1, !dbg !16
|
||||
// CHECK:STDOUT: %_.var.loc13 = alloca [4 x i8], align 1, !dbg !17
|
||||
// CHECK:STDOUT: %.loc8_65.1.temp = alloca [4 x i8], align 4, !dbg !14
|
||||
// CHECK:STDOUT: %_.var.loc9 = alloca [4 x i8], align 4, !dbg !15
|
||||
// CHECK:STDOUT: %.loc12_65.1.temp = alloca [4 x i8], align 4, !dbg !16
|
||||
// CHECK:STDOUT: %_.var.loc13 = alloca [4 x i8], align 4, !dbg !17
|
||||
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc8_65.1.temp), !dbg !14
|
||||
// CHECK:STDOUT: call void @_ZN26ImplicitlyDefaultedDefaultC1Ev.carbon_thunk.(ptr %.loc8_65.1.temp), !dbg !14
|
||||
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var.loc9), !dbg !15
|
||||
@@ -532,7 +532,7 @@ fn Four() {
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @_CCopy.Main(ptr sret([4 x i8]) %return, ptr %c) #0 !dbg !11 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: %.loc7_10.1.temp = alloca [4 x i8], align 1, !dbg !17
|
||||
// CHECK:STDOUT: %.loc7_10.1.temp = alloca [4 x i8], align 4, !dbg !17
|
||||
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc7_10.1.temp), !dbg !17
|
||||
// CHECK:STDOUT: call void @_ZN4CopyC1ERKS_.carbon_thunk._(ptr %c, ptr %return), !dbg !17
|
||||
// CHECK:STDOUT: ret void, !dbg !18
|
||||
@@ -631,7 +631,7 @@ fn Four() {
|
||||
// CHECK:STDOUT: ; Function Attrs: nounwind
|
||||
// CHECK:STDOUT: define void @_CF.Main() #0 !dbg !11 {
|
||||
// CHECK:STDOUT: entry:
|
||||
// CHECK:STDOUT: %.loc7_44.1.temp = alloca [8 x i8], align 1, !dbg !14
|
||||
// CHECK:STDOUT: %.loc7_44.1.temp = alloca [8 x i8], align 8, !dbg !14
|
||||
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc7_44.1.temp), !dbg !14
|
||||
// CHECK:STDOUT: call void @_ZN7DerivedC1Ev.carbon_thunk.(ptr %.loc7_44.1.temp), !dbg !14
|
||||
// CHECK:STDOUT: ret void, !dbg !15
|
||||
|
||||
Reference in New Issue
Block a user