|
| 1 | +// RUN: %target-swift-emit-ir -I %S/Inputs -enable-cxx-interop %s | %FileCheck %s |
| 2 | + |
| 3 | +import StaticVar |
| 4 | + |
| 5 | +public func initStaticVars() -> CInt { |
| 6 | + return staticVar + staticVarInit + staticVarInlineInit + staticConst + staticConstInit |
| 7 | + + staticConstInlineInit + staticConstexpr + staticNonTrivial.val + staticConstNonTrivial.val |
| 8 | + + staticConstexprNonTrivial.val |
| 9 | +} |
| 10 | + |
| 11 | +// CHECK: @{{_ZL9staticVar|staticVar}} = internal global i32 2, align 4 |
| 12 | +// CHECK: @{{_ZL13staticVarInit|staticVarInit}} = internal global i32 0, align 4 |
| 13 | +// CHECK: @{{_ZL19staticVarInlineInit|staticVarInlineInit}} = internal global i32 0, align 4 |
| 14 | +// CHECK: @{{_ZL11staticConst|staticConst}} = internal constant i32 4, align 4 |
| 15 | +// CHECK: @{{_ZL15staticConstInit|staticConstInit}} = internal global i32 0, align 4 |
| 16 | +// CHECK: @{{_ZL21staticConstInlineInit|staticConstInlineInit}} = internal global i32 0, align 4 |
| 17 | +// CHECK: @{{_ZL15staticConstexpr|staticConstexpr}} = internal constant i32 32, align 4 |
| 18 | +// CHECK: @{{_ZL16staticNonTrivial|staticNonTrivial}} = internal global %class.NonTrivial zeroinitializer, align 4 |
| 19 | +// CHECK: @{{_ZL21staticConstNonTrivial|staticConstNonTrivial}} = internal global %class.NonTrivial zeroinitializer, align 4 |
| 20 | +// CHECK: @{{_ZL25staticConstexprNonTrivial|staticConstexprNonTrivial}} = internal constant %class.NonTrivial { i32 8192 }, align 4 |
| 21 | + |
| 22 | +// CHECK: define internal void @{{__cxx_global_var_init|"\?\?__EstaticVarInit@@YAXXZ"}}() |
| 23 | +// CHECK: %call = call i32 @{{_Z13makeStaticVarv|"\?makeStaticVar@@YAHXZ"}}() |
| 24 | +// CHECK: store i32 %call, i32* @{{_ZL13staticVarInit|staticVarInit}}, align 4 |
| 25 | + |
| 26 | +// CHECK: declare{{( dso_local)?}} i32 @{{_Z13makeStaticVarv|"\?makeStaticVar@@YAHXZ"}}() |
| 27 | + |
| 28 | +// CHECK: define internal void @{{__cxx_global_var_init.1|"\?\?__EstaticVarInlineInit@@YAXXZ"}}() |
| 29 | +// CHECK: %call = call i32 @{{_Z19inlineMakeStaticVarv|"\?inlineMakeStaticVar@@YAHXZ"}}() |
| 30 | +// CHECK: store i32 %call, i32* @{{_ZL19staticVarInlineInit|staticVarInlineInit}}, align 4 |
| 31 | + |
| 32 | +// CHECK: define linkonce_odr{{( dso_local)?}} i32 @{{_Z19inlineMakeStaticVarv|"\?inlineMakeStaticVar@@YAHXZ"}}() |
| 33 | +// CHECK: ret i32 8 |
| 34 | + |
| 35 | +// CHECK: define internal void @{{__cxx_global_var_init.2|"\?\?__EstaticConstInit@@YAXXZ"}}() |
| 36 | +// CHECK: %call = call i32 @{{_Z15makeStaticConstv|"\?makeStaticConst@@YAHXZ"}}() |
| 37 | +// CHECK: store i32 %call, i32* @{{_ZL15staticConstInit|staticConstInit}}, align 4 |
| 38 | + |
| 39 | +// CHECK: declare{{( dso_local)?}} i32 @{{_Z15makeStaticConstv|"\?makeStaticConst@@YAHXZ"}}() |
| 40 | + |
| 41 | +// CHECK: define internal void @{{__cxx_global_var_init.3|"\?\?__EstaticConstInlineInit@@YAXXZ"}}() |
| 42 | +// CHECK: %call = call i32 @{{_Z21inlineMakeStaticConstv|"\?inlineMakeStaticConst@@YAHXZ"}}() |
| 43 | +// CHECK: store i32 %call, i32* @{{_ZL21staticConstInlineInit|staticConstInlineInit}}, align 4 |
| 44 | + |
| 45 | +// CHECK: define linkonce_odr{{( dso_local)?}} i32 @{{_Z21inlineMakeStaticConstv|"\?inlineMakeStaticConst@@YAHXZ"}}() |
| 46 | +// CHECK: ret i32 16 |
| 47 | + |
| 48 | +// CHECK: define internal void @{{__cxx_global_var_init.4|"\?\?__EstaticNonTrivial@@YAXXZ"}}() |
| 49 | +// CHECK: call {{void @_ZN10NonTrivialC[12]Ei\(%class.NonTrivial\* @_ZL16staticNonTrivial, i32 1024\)|%class.NonTrivial\* @"\?\?0NonTrivial@@QEAA@H@Z"\(%class.NonTrivial\* @staticNonTrivial, i32 1024\)}} |
| 50 | + |
| 51 | +// CHECK: define internal void @{{__cxx_global_var_init.5|"\?\?__EstaticConstNonTrivial@@YAXXZ"}}() |
| 52 | +// CHECK: call {{void @_ZN10NonTrivialC[12]Ei\(%class.NonTrivial\* @_ZL21staticConstNonTrivial, i32 2048\)|%class.NonTrivial\* @"\?\?0NonTrivial@@QEAA@H@Z"\(%class.NonTrivial\* @staticConstNonTrivial, i32 2048\)}} |
| 53 | + |
| 54 | +public func readStaticVar() -> CInt { |
| 55 | + return staticVar |
| 56 | +} |
| 57 | + |
| 58 | +// CHECK: define {{(protected |dllexport )?}}swiftcc i32 @"$s4main13readStaticVars5Int32VyF"() |
| 59 | +// CHECK: [[VALUE:%.*]] = load i32, i32* getelementptr inbounds (%Ts5Int32V, %Ts5Int32V* bitcast (i32* @{{_ZL9staticVar|staticVar}} to %Ts5Int32V*), i32 0, i32 0), align 4 |
| 60 | +// CHECK: ret i32 [[VALUE]] |
| 61 | + |
| 62 | +public func writeStaticVar(_ v: CInt) { |
| 63 | + staticVar = v |
| 64 | +} |
| 65 | + |
| 66 | +// CHECK: define {{(protected |dllexport )?}}swiftcc void @"$s4main14writeStaticVaryys5Int32VF"(i32 %0) |
| 67 | +// CHECK: store i32 %0, i32* getelementptr inbounds (%Ts5Int32V, %Ts5Int32V* bitcast (i32* @{{_ZL9staticVar|staticVar}} to %Ts5Int32V*), i32 0, i32 0), align 4 |
| 68 | + |
| 69 | +public func readStaticNonTrivial() -> NonTrivial { |
| 70 | + return staticNonTrivial |
| 71 | +} |
| 72 | + |
| 73 | +// CHECK: define {{(protected |dllexport )?}}swiftcc i32 @"$s4main20readStaticNonTrivialSo0dE0VyF"() |
| 74 | +// CHECK: [[VALUE:%.*]] = load i32, i32* getelementptr inbounds (%TSo10NonTrivialV, %TSo10NonTrivialV* bitcast (%class.NonTrivial* @{{_ZL16staticNonTrivial|staticNonTrivial}} to %TSo10NonTrivialV*), i32 0, i32 0, i32 0), align 4 |
| 75 | +// CHECK: ret i32 [[VALUE]] |
| 76 | + |
| 77 | +public func writeStaticNonTrivial(_ i: NonTrivial) { |
| 78 | + staticNonTrivial = i |
| 79 | +} |
| 80 | + |
| 81 | +// CHECK: define {{(protected |dllexport )?}}swiftcc void @"$s4main21writeStaticNonTrivialyySo0dE0VF"(i32 %0) |
| 82 | +// CHECK: store i32 %0, i32* getelementptr inbounds (%TSo10NonTrivialV, %TSo10NonTrivialV* bitcast (%class.NonTrivial* @{{_ZL16staticNonTrivial|staticNonTrivial}} to %TSo10NonTrivialV*), i32 0, i32 0, i32 0), align 4 |
| 83 | + |
| 84 | +func modifyInout(_ c: inout CInt) { |
| 85 | + c = 42 |
| 86 | +} |
| 87 | + |
| 88 | +public func passingVarAsInout() { |
| 89 | + modifyInout(&staticVar) |
| 90 | +} |
| 91 | +// CHECK: define {{(protected |dllexport )?}}swiftcc void @"$s4main17passingVarAsInoutyyF"() |
| 92 | +// CHECK: call swiftcc void @"$s4main11modifyInoutyys5Int32VzF"(%Ts5Int32V* nocapture dereferenceable(4) bitcast (i32* @{{_ZL9staticVar|staticVar}} to %Ts5Int32V*)) |
| 93 | + |
| 94 | +// CHECK: define internal void @_GLOBAL__sub_I__swift_imported_modules_() |
| 95 | +// CHECK: call void @{{__cxx_global_var_init|"\?\?__EstaticVarInit@@YAXXZ"}}() |
| 96 | +// CHECK: call void @{{__cxx_global_var_init.1|"\?\?__EstaticVarInlineInit@@YAXXZ"}}() |
| 97 | +// CHECK: call void @{{__cxx_global_var_init.2|"\?\?__EstaticConstInit@@YAXXZ"}}() |
| 98 | +// CHECK: call void @{{__cxx_global_var_init.3|"\?\?__EstaticConstInlineInit@@YAXXZ"}}() |
| 99 | +// CHECK: call void @{{__cxx_global_var_init.4|"\?\?__EstaticNonTrivial@@YAXXZ"}}() |
| 100 | +// CHECK: call void @{{__cxx_global_var_init.5|"\?\?__EstaticConstNonTrivial@@YAXXZ"}}() |
0 commit comments