mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
We can still produce an undefined address for the empty value, even though we considered them as no-payload cases for layout purposes. Fixes rdar://problem/21515490. Swift SVN r30490
46 lines
1.6 KiB
Plaintext
46 lines
1.6 KiB
Plaintext
// RUN: %target-swift-frontend -emit-ir -verify %s
|
|
sil_stage canonical
|
|
|
|
struct Empty<T> {}
|
|
|
|
enum SinglePayload<T> {
|
|
case A(T)
|
|
case B()
|
|
case C(Empty<T>)
|
|
}
|
|
|
|
enum MultiPayload<T, U> {
|
|
case A(T)
|
|
case B(U)
|
|
case C()
|
|
case D()
|
|
case E(Empty<T>)
|
|
case F(Empty<U>)
|
|
}
|
|
|
|
sil @project_empty_payloads_single : $@convention(thin) <T> (@in SinglePayload<T>) -> () {
|
|
entry(%0 : $*SinglePayload<T>):
|
|
%1 = init_enum_data_addr %0 : $*SinglePayload<T>, #SinglePayload.B!enumelt.1
|
|
%2 = init_enum_data_addr %0 : $*SinglePayload<T>, #SinglePayload.C!enumelt.1
|
|
|
|
%3 = unchecked_take_enum_data_addr %0 : $*SinglePayload<T>, #SinglePayload.B!enumelt.1
|
|
%4 = unchecked_take_enum_data_addr %0 : $*SinglePayload<T>, #SinglePayload.C!enumelt.1
|
|
|
|
return undef : $()
|
|
}
|
|
|
|
sil @project_empty_payloads_multi : $@convention(thin) <T, U> (@in MultiPayload<T, U>) -> () {
|
|
entry(%0 : $*MultiPayload<T, U>):
|
|
%1 = init_enum_data_addr %0 : $*MultiPayload<T, U>, #MultiPayload.C!enumelt.1
|
|
%2 = init_enum_data_addr %0 : $*MultiPayload<T, U>, #MultiPayload.D!enumelt.1
|
|
%3 = init_enum_data_addr %0 : $*MultiPayload<T, U>, #MultiPayload.E!enumelt.1
|
|
%4 = init_enum_data_addr %0 : $*MultiPayload<T, U>, #MultiPayload.F!enumelt.1
|
|
|
|
%5 = unchecked_take_enum_data_addr %0 : $*MultiPayload<T, U>, #MultiPayload.C!enumelt.1
|
|
%6 = unchecked_take_enum_data_addr %0 : $*MultiPayload<T, U>, #MultiPayload.D!enumelt.1
|
|
%7 = unchecked_take_enum_data_addr %0 : $*MultiPayload<T, U>, #MultiPayload.E!enumelt.1
|
|
%8 = unchecked_take_enum_data_addr %0 : $*MultiPayload<T, U>, #MultiPayload.F!enumelt.1
|
|
|
|
return undef : $()
|
|
}
|