forked from swiftlang/swift
- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclosure-args.swift
57 lines (49 loc) · 2.29 KB
/
closure-args.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// RUN: %target-swift-frontend %s -emit-ir -g -o - | %FileCheck %s
import Swift
func main()->Void
{
// I am line 6.
varrandom_string="b"
varrandom_int=5
varout_only=2013
varbackward_ptr=
// CHECK: define internal {{.*}} i1 @"$s4mainAAyyFSbSS_SStcfU_"(
// CHECK: %[[RANDOM_STR_ADDR:.*]] = alloca ptr, align {{(4|8)}}
// FIXME(TODO: JIRA): i386 String is temporarily larger, and that causes the
// value to be by-address. When that is fixed, remove the optional
// DW_OP_deref below.
//
// CHECK-NEXT: #dbg_declare(ptr %[[RANDOM_STR_ADDR]], !{{.*}}, !DIExpression({{(DW_OP_deref)?}})
// CHECK: store ptr %{{.*}}, ptr %[[RANDOM_STR_ADDR]], align {{(4|8)}}
// CHECK-DAG: !DILocalVariable(name: "lhs",{{.*}} line: [[@LINE+5]],
// CHECK-DAG: !DILocalVariable(name: "rhs",{{.*}} line: [[@LINE+4]],
// CHECK-DAG: !DILocalVariable(name: "random_string",{{.*}} line: 8,
// CHECK-DAG: !DILocalVariable(name: "random_int",{{.*}} line: 9,
// CHECK-DAG: !DILocalVariable(name: "out_only",{{.*}} line: 10,
{(lhs :String, rhs :String)->Boolin
if rhs == random_string
|| rhs.unicodeScalars.count == random_int
{
// Ensure the two local_vars are in different lexical scopes.
// CHECK-DAG: !DILocalVariable(name: "local_var", scope: ![[THENSCOPE:[0-9]+]],{{.*}} line: [[@LINE+2]],
// CHECK-DAG: ![[THENSCOPE]] = distinct !DILexicalBlock({{.*}} line: [[@LINE+1]]
varlocal_var:Int64=10
print("I have an int here \(local_var).\n", terminator:"")
returnfalse
}
else
{
// CHECK-DAG: !DILocalVariable(name: "local_var", scope: ![[ELSESCOPE:[0-9]+]],{{.*}} line: [[@LINE+2]]
// CHECK-DAG: ![[ELSESCOPE]] = distinct !DILexicalBlock({{.*}} line: [[@LINE+1]],
varlocal_var:String="g"
print("I have another string here \(local_var).\n", terminator:"")
// Assign to all the captured variables to inhibit capture promotion.
random_string ="c"
random_int =-1
out_only =333
return rhs < lhs
}
}
varbool=backward_ptr("a","b")
}
main()