File: synthesized_conformance_future.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 (102 lines) | stat: -rw-r--r-- 4,590 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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -swift-version 4 | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment

// REQUIRES: VENDOR=apple || OS=linux-gnu
// UNSUPPORTED: CPU=i386 && OS=ios
// UNSUPPORTED: CPU=armv7 && OS=ios
// UNSUPPORTED: CPU=armv7s && OS=ios

struct Struct<T> {
    var x: T
}

extension Struct: Equatable where T: Equatable {}
extension Struct: Hashable where T: Hashable {}
extension Struct: Codable where T: Codable {}

enum Enum<T> {
    case a(T), b(T)
}

extension Enum: Equatable where T: Equatable {}
extension Enum: Hashable where T: Hashable {}
extension Enum: Codable where T: Codable {}

final class Final<T> {
    var x: T
    init(x: T) { self.x = x }
}

extension Final: Encodable where T: Encodable {}
extension Final: Decodable where T: Decodable {}

class Nonfinal<T> {
    var x: T
    init(x: T) { self.x = x }
}
extension Nonfinal: Encodable where T: Encodable {}

func doEquality<T: Equatable>(_: T) {}
// CHECK-LABEL: define{{( dllexport| protected)?}} swiftcc void @"$s30synthesized_conformance_future8equalityyyF"()
public func equality() {
    // CHECK: [[TMP:%.*]] = alloca %TSi
    // CHECK: call swiftcc void @"$s30synthesized_conformance_future6StructV1xACyxGx_tcfC"(ptr noalias {{[^,]*}}, ptr noalias [[TMP]], ptr @"$sSiN")
    // CHECK: [[Struct_Equatable:%.*]] = call ptr @"$s30synthesized_conformance_future6StructVySiGACyxGSQAASQRzlWl"()
    // CHECK-NEXT: call swiftcc void @"$s30synthesized_conformance_future10doEqualityyyxSQRzlF"(
    // CHECK-SAME:   ptr noalias {{[^,]*}},
    // CHECK-SAME:   ptr getelementptr inbounds (
    // CHECK-SAME:     %swift.full_type,
    // CHECK-SAME:     ptr @"$s30synthesized_conformance_future6StructVySiGMf", 
    // CHECK-SAME:     i32 0,
    // CHECK-SAME:     i32 2
    // CHECK-SAME:   ),
    // CHECK-SAME:   ptr [[Struct_Equatable]]
    // CHECK-SAME: )
    doEquality(Struct(x: 1))
    // CHECK: [[Enum_Equatable:%.*]] = call ptr @"$s30synthesized_conformance_future4EnumOySiGACyxGSQAASQRzlWl"()
    // CHECK-NEXT: call swiftcc void @"$s30synthesized_conformance_future10doEqualityyyxSQRzlF"(
    // CHECK-SAME:   ptr noalias {{%[^,]+}}, 
    // CHECK-SAME:   ptr getelementptr inbounds (
    // CHECK-SAME:     %swift.full_type,
    // CHECK-SAME:     ptr @"$s30synthesized_conformance_future4EnumOySiGMf",
    // CHECK-SAME:     i32 0,
    // CHECK-SAME:     i32 2
    // CHECK-SAME:   ), 
    // CHECK-SAME:   ptr [[Enum_Equatable]]
    // CHECK-SAME: )
    doEquality(Enum.a(1))
}

func doEncodable<T: Encodable>(_: T) {}
// CHECK-LABEL: define{{( dllexport| protected)?}} swiftcc void @"$s30synthesized_conformance_future9encodableyyF"()
public func encodable() {
    // CHECK: [[Struct_Encodable:%.*]] = call ptr @"$s30synthesized_conformance_future6StructVySiGACyxGSEAASeRzSERzlWl"()
    // CHECK-NEXT: call swiftcc void @"$s30synthesized_conformance_future11doEncodableyyxSERzlF"(
    // CHECK-SAME:   ptr noalias {{[^,]*}}, 
    // CHECK-SAME:   ptr getelementptr inbounds (
    // CHECK-SAME:     %swift.full_type,
    // CHECK-SAME:     ptr @"$s30synthesized_conformance_future6StructVySiGMf", 
    // CHECK-SAME:     i32 0, 
    // CHECK-SAME:     i32 2
    // CHECK-SAME:   ), 
    // CHECK-SAME:   ptr [[Struct_Encodable]]
    // CHECK-SAME: )
    doEncodable(Struct(x: 1))
    // CHECK: [[Enum_Encodable:%.*]] = call ptr @"$s30synthesized_conformance_future4EnumOySiGACyxGSEAASeRzSERzlWl"()
    // CHECK-NEXT: call swiftcc void @"$s30synthesized_conformance_future11doEncodableyyxSERzlF"(
    // CHECK-SAME:   ptr noalias {{[^,]*}},
    // CHECK-SAME:   ptr getelementptr inbounds (
    // CHECK-SAME:     %swift.full_type,
    // CHECK-SAME:     ptr @"$s30synthesized_conformance_future4EnumOySiGMf"
    // CHECK-SAME:     i32 0,
    // CHECK-SAME:     i32 2
    // CHECK-SAME:   ),
    // CHECK-SAME:   ptr [[Enum_Encodable]]
    // CHECK-SAME: )
    doEncodable(Enum.a(1))
    // CHECK: [[Final_Encodable:%.*]] = call ptr @"$s30synthesized_conformance_future5FinalCySiGACyxGSEAASERzlWl"()
    // CHECK-NEXT: call swiftcc void @"$s30synthesized_conformance_future11doEncodableyyxSERzlF"(ptr noalias {{%.*}}, ptr {{%.*}}, ptr [[Final_Encodable]])
    doEncodable(Final(x: 1))
    // CHECK: [[Nonfinal_Encodable:%.*]] = call ptr @"$s30synthesized_conformance_future8NonfinalCySiGACyxGSEAASERzlWl"()
    // CHECK-NEXT: call swiftcc void @"$s30synthesized_conformance_future11doEncodableyyxSERzlF"(ptr noalias {{%.*}}, ptr {{%.*}}, ptr [[Nonfinal_Encodable]])
    doEncodable(Nonfinal(x: 1))
}