Skip to content

Commit fdcb330

Browse files
committed
Add inout tests, add labels
1 parent f4d897e commit fdcb330

File tree

2 files changed

+41
-7
lines changed

2 files changed

+41
-7
lines changed

test/Interop/Cxx/extern-var/extern-var-irgen.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,24 @@
55
// CHECK: @counter = external global i32, align 4
66

77
// CHECK: define hidden swiftcc i32 @"$s4main10getCounters5Int32VyF"() #0
8-
// CHECK: load i32, i32* getelementptr inbounds (%Ts5Int32V, %Ts5Int32V* bitcast (i32* @counter to %Ts5Int32V*), i32 0, i32 0), align 4
8+
// CHECK: [[LOAD:%.*]] = load i32, i32* getelementptr inbounds (%Ts5Int32V, %Ts5Int32V* bitcast (i32* @counter to %Ts5Int32V*), i32 0, i32 0), align 4
9+
// CHECK: ret i32 [[LOAD]]
910

1011
// CHECK: define hidden swiftcc void @"$s4main10setCounteryys5Int32VF"(i32 %0) #0
1112
// CHECK: store i32 %0, i32* getelementptr inbounds (%Ts5Int32V, %Ts5Int32V* bitcast (i32* @counter to %Ts5Int32V*), i32 0, i32 0), align 4
1213

1314
// CHECK: define hidden swiftcc i32 @"$s4main20getNamespacedCounters5Int32VyF"() #0
1415
//FIXME mangle non-top-level var names to prevent name collisions and check:
1516
// load i32, i32* getelementptr inbounds (%Ts5Int32V, %Ts5Int32V* bitcast (i32* @Namespaced.counter to %Ts5Int32V*), i32 0, i32 0), align 4
17+
// CHECK: ret i32 %1
18+
1619
// CHECK: define hidden swiftcc void @"$s4main20setNamespacedCounteryys5Int32VF"(i32 %0) #0
1720
//FIXME mangle non-top-level var names to prevent name collisions and check:
1821
// store i32 %0, i32* getelementptr inbounds (%Ts5Int32V, %Ts5Int32V* bitcast (i32* @Namespaced.counter to %Ts5Int32V*), i32 0, i32 0), align 4
1922

23+
// CHECK: define hidden swiftcc void @"$s4main17passingVarAsInoutyyF"() #0
24+
// CHECK: call swiftcc void @"$s4main11modifyInoutyys5Int32VzF"(%Ts5Int32V* nocapture dereferenceable(4) bitcast (i32* @counter to %Ts5Int32V*))
25+
2026
import ExternVar
2127

2228
func getCounter() -> CInt {
@@ -34,3 +40,11 @@ func getNamespacedCounter() -> CInt {
3440
func setNamespacedCounter(_ c: CInt) {
3541
Namespaced.counter = c
3642
}
43+
44+
func modifyInout(_ c: inout CInt) {
45+
c = 42
46+
}
47+
48+
func passingVarAsInout() {
49+
modifyInout(&counter)
50+
}

test/Interop/Cxx/extern-var/extern-var-silgen.swift

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,34 @@
55
// CHECK: sil_global @counter : $Int32
66

77
// CHECK: sil hidden @$s4main10getCounters5Int32VyF : $@convention(thin) () -> Int32
8-
// CHECK: %0 = global_addr @counter : $*Int32
9-
// CHECK: begin_access [read] [dynamic] %0 : $*Int32
8+
// CHECK: [[COUNTER:%.*]] = global_addr @counter : $*Int32
9+
// CHECK: [[ACCESS:%.*]] = begin_access [read] [dynamic] [[COUNTER]] : $*Int32
10+
// CHECK: [[LOAD:%.*]] = load [[ACCESS]] : $*Int32
11+
// CHECK: return [[LOAD]] : $Int32
1012

1113
// CHECK: sil hidden @$s4main10setCounteryys5Int32VF : $@convention(thin) (Int32) -> ()
12-
// CHECK: %1 = global_addr @counter : $*Int32
13-
// CHECK: %3 = begin_access [modify] [dynamic] %1 : $*Int32
14+
// CHECK: [[COUNTER:%.*]] = global_addr @counter : $*Int32
15+
// CHECK: [[ACCESS:%.*]] = begin_access [modify] [dynamic] [[COUNTER]] : $*Int32
16+
// CHECK: store %0 to [[ACCESS]] : $*Int32
1417

1518
// sil hidden @$s4main20getNamespacedCounters5Int32VyF : $@convention(thin) () -> Int32
1619
//FIXME mangle non-top-level var names to prevent name collisions
1720
// %0 = global_addr @Namespaced.counter : $*Int32
18-
// CHECK: begin_access [read] [dynamic] %0 : $*Int32
21+
// CHECK: [[ACCESS:%.*]] = begin_access [read] [dynamic] %0 : $*Int32
22+
// CHECK: [[LOAD:%.*]] = load [[ACCESS]] : $*Int32
23+
// CHECK: return [[LOAD]] : $Int32
1924

2025
// CHECK: sil hidden @$s4main20setNamespacedCounteryys5Int32VF : $@convention(thin) (Int32) -> ()
2126
//FIXME mangle non-top-level var names to prevent name collisions
2227
// %1 = global_addr @Namespaced.counter : $*Int32
23-
// CHECK: %4 = begin_access [modify] [dynamic] %1 : $*Int32
28+
// CHECK: [[ACCESS:%.*]] = begin_access [modify] [dynamic] %1 : $*Int32
29+
// CHECK: store %0 to [[ACCESS]] : $*Int32
30+
31+
// CHECK: sil hidden @$s4main17passingVarAsInoutyyF : $@convention(thin) () -> ()
32+
// CHECK: [[COUNTER:%.*]] = global_addr @counter : $*Int32
33+
// CHECK: [[ACCESS:%.*]] = begin_access [modify] [dynamic] [[COUNTER]] : $*Int32
34+
// CHECK: [[FUNCTION:%.*]] = function_ref @$s4main11modifyInoutyys5Int32VzF : $@convention(thin) (@inout Int32) -> ()
35+
// CHECK: apply [[FUNCTION]]([[ACCESS]]) : $@convention(thin) (@inout Int32) -> ()
2436

2537
import ExternVar
2638

@@ -39,3 +51,11 @@ func getNamespacedCounter() -> CInt {
3951
func setNamespacedCounter(_ c: CInt) {
4052
Namespaced.counter = c
4153
}
54+
55+
func modifyInout(_ c: inout CInt) {
56+
c = 42
57+
}
58+
59+
func passingVarAsInout() {
60+
modifyInout(&counter)
61+
}

0 commit comments

Comments
 (0)