File: variadic_generic_captures.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (72 lines) | stat: -rw-r--r-- 3,446 bytes parent folder | download
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize

public func takesNoEscape(_: () -> ()) {}

public func has_metadata_pack<each T>(t: repeat each T) -> () -> () {
  return { _ = (repeat each T).self }
}

// CHECK-LABEL: define{{( protected)?}}{{( dllexport)?}} swiftcc { ptr, ptr } @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlF"(ptr noalias %0, i{{32|64}} %1, ptr %"each T") #0 {
// CHECK: [[CONTEXT0:%.*]] = call noalias ptr @swift_allocObject(

// CHECK: [[GENERIC_ARGS_ADDR:%.*]] = getelementptr inbounds {{.*}} [[CONTEXT0]], i32 0, i32 {{(1|2)}}
// CHECK: store [[INT]] %1, ptr [[GENERIC_ARGS_ADDR]]

// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[GENERIC_ARGS_ADDR]], i32 1
// CHECK: [[T_HEAP:%.*]] = call swiftcc ptr @swift_allocateMetadataPack(ptr %"each T", [[INT]] %1)
// CHECK: store ptr [[T_HEAP]], ptr [[T_ADDR]]

// CHECK: [[CONTEXT1:%.*]] = insertvalue {{.*}} @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlFyycfU_TA{{(\.ptrauth)?}}"
// CHECK: ret { ptr, ptr } [[CONTEXT1]]

// CHECK-LABEL: define internal swiftcc void @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlFyycfU_TA"(ptr swiftself %0)
// CHECK: [[GENERIC_ARGS:%.*]] = getelementptr inbounds {{.*}} %0, i32 0, i32 {{(1|2)}}

// CHECK: [[SHAPE:%.*]] = load [[INT]], ptr [[GENERIC_ARGS]]

// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[GENERIC_ARGS]], i32 1
// CHECK: [[T:%.*]] = load ptr, ptr [[T_ADDR]]

// CHECK: tail call swiftcc void @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlFyycfU_"([[INT]] [[SHAPE]], ptr [[T]])
// CHECK: ret void

public func has_metadata_pack_noescape<each T>(t: repeat each T) {
  takesNoEscape { _ = (repeat each T).self }
}

// CHECK-LABEL: define{{( protected)?}}{{( dllexport)?}} swiftcc void @"$s25variadic_generic_captures26has_metadata_pack_noescape1tyxxQp_tRvzlF"(ptr noalias %0, i{{32|64}} %1, ptr %"each T") #0 {
// CHECK: [[CONTEXT0:%.*]] = alloca i8, [[INT]]

// CHECK: [[GENERIC_ARGS:%.*]] = getelementptr inbounds {{.*}} [[CONTEXT0]], i32 0, i32 {{(1|2)}}
// CHECK: store [[INT]] %1, ptr [[GENERIC_ARGS]]

// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[GENERIC_ARGS]], i32 1
// CHECK: store ptr %"each T", ptr [[T_ADDR]]

// CHECK:  call swiftcc void @"$s25variadic_generic_captures13takesNoEscapeyyyyXEF"(
// CHECK: ret void

// CHECK-LABEL: define internal swiftcc void @"$s25variadic_generic_captures26has_metadata_pack_noescape1tyxxQp_tRvzlFyyXEfU_TA"(ptr swiftself %0)
// CHECK: [[GENERIC_ARGS:%.*]] = getelementptr inbounds {{.*}} %0, i32 0, i32 {{(1|2)}}

// CHECK: [[SHAPE:%.*]] = load [[INT]], ptr [[GENERIC_ARGS]]

// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[GENERIC_ARGS]], i32 1
// CHECK: [[T:%.*]] = load ptr, ptr [[T_ADDR]]

// CHECK: tail call swiftcc void @"$s25variadic_generic_captures26has_metadata_pack_noescape1tyxxQp_tRvzlFyyXEfU_"([[INT]] [[SHAPE]], ptr [[T]])
// CHECK: ret void

public func has_witness_table_pack<each T: Sequence>(t: repeat each T) -> () -> () {
  return { _ = (repeat (each T).Element).self }
}

public func has_witness_table_pack2<each T: Sequence>(t: repeat each T) -> () -> ()
    where repeat (each T).Element: Sequence {
  return { _ = (repeat (each T).Element.Element).self }
}

// https://github.com/apple/swift/issues/71455
func f<each T>(t: (repeat each T)) {
  let tup = (repeat ((each T).self, each t))
}