Files
swift-mirror/test/SILGen/union.swift
Joe Groff c0a2994564 AST: Start printing function types with @convention instead of old attributes.
And update tests to match.

Swift SVN r27262
2015-04-13 22:51:34 +00:00

75 lines
3.0 KiB
Swift

// RUN: %target-swift-frontend -emit-silgen -parse-as-library %s | FileCheck %s
enum Boolish {
case falsy
case truthy
}
// CHECK-LABEL: sil hidden [transparent] @_TFO5union7Boolish5falsyFMS0_S0_ : $@convention(thin) (@thin Boolish.Type) -> Boolish {
// CHECK: bb0({{%.*}} : $@thin Boolish.Type):
// CHECK: [[RES:%.*]] = enum $Boolish, #Boolish.falsy!enumelt
// CHECK: return [[RES]] : $Boolish
// CHECK: }
// CHECK-LABEL: sil hidden [transparent] @_TFO5union7Boolish6truthyFMS0_S0_ : $@convention(thin) (@thin Boolish.Type) -> Boolish {
// CHECK: bb0({{%.*}} : $@thin Boolish.Type):
// CHECK: [[RES:%.*]] = enum $Boolish, #Boolish.truthy!enumelt
// CHECK: return [[RES]] : $Boolish
// CHECK: }
enum Optionable {
case nought
case mere(Int)
}
// CHECK-LABEL: sil hidden [transparent] @_TFO5union10Optionable6noughtFMS0_S0_ : $@convention(thin) (@thin Optionable.Type) -> Optionable {
// CHECK: bb0({{%.*}} : $@thin Optionable.Type):
// CHECK: [[RES:%.*]] = enum $Optionable, #Optionable.nought!enumelt
// CHECK: return [[RES]] : $Optionable
// CHECK: }
// CHECK-LABEL: sil hidden [transparent] @_TFO5union10Optionable4merefMS0_FSiS0_ : $@convention(thin) (Int, @thin Optionable.Type) -> Optionable {
// CHECK: bb0([[ARG:%.*]] : $Int, {{%.*}} : $@thin Optionable.Type):
// CHECK: [[RES:%.*]] = enum $Optionable, #Optionable.mere!enumelt.1, [[ARG]] : $Int
// CHECK: return [[RES]] : $Optionable
// CHECK: }
// CHECK-LABEL: sil hidden @_TF5uniong6truthyOS_7Boolish
var truthy : Boolish {
// CHECK: [[TRUTHY:%[0-9]+]] = function_ref @_TFO5union7Boolish6truthyFMS0_S0_
// CHECK: [[BOOLISH:%[0-9]+]] = metatype $@thin Boolish.Type
// CHECK: [[RESULT:%[0-9]+]] = apply [[TRUTHY]]([[BOOLISH]])
// CHECK: return [[RESULT]]
return .truthy
}
// CHECK-LABEL: sil hidden @_TF5uniong5falsyOS_7Boolish
var falsy : Boolish {
// CHECK: [[FALSY:%[0-9]+]] = function_ref @_TFO5union7Boolish5falsyFMS0_S0_
// CHECK: [[BOOLISH:%[0-9]+]] = metatype $@thin Boolish.Type
// CHECK: [[RESULT:%[0-9]+]] = apply [[FALSY]]([[BOOLISH]])
// CHECK: return [[RESULT]]
return .falsy
}
protocol P {}
enum AddressOnly {
case nought
case mere(P)
}
// CHECK-LABEL: sil hidden [transparent] @_TFO5union11AddressOnly6noughtFMS0_S0_ : $@convention(thin) (@out AddressOnly, @thin AddressOnly.Type) -> () {
// CHECK: bb0([[RET:%.*]] : $*AddressOnly, {{%.*}} : $@thin AddressOnly.Type):
// CHECK: inject_enum_addr [[RET]] : $*AddressOnly, #AddressOnly.nought!enumelt
// CHECK: return
// CHECK: }
// CHECK-LABEL: sil hidden [transparent] @_TFO5union11AddressOnly4merefMS0_FPS_1P_S0_ : $@convention(thin) (@out AddressOnly, @in P, @thin AddressOnly.Type) -> () {
// CHECK: bb0([[RET:%.*]] : $*AddressOnly, [[DATA:%.*]] : $*P, {{%.*}} : $@thin AddressOnly.Type):
// CHECK: [[RET_DATA:%.*]] = init_enum_data_addr [[RET]] : $*AddressOnly, #AddressOnly.mere!enumelt.1 // user: %4
// CHECK: copy_addr [take] [[DATA]] to [initialization] [[RET_DATA]] : $*P
// CHECK: inject_enum_addr [[RET]] : $*AddressOnly, #AddressOnly.mere!enumelt.1
// CHECK: return
// CHECK: }