// RUN: %swift -target i386-apple-ios7 %s -gnone -emit-ir | %FileCheck %s
// RUN: %swift -target armv7-apple-ios7 %s -gnone -emit-ir | %FileCheck %s

// REQUIRES: CODEGENERATOR=X86
// REQUIRES: CODEGENERATOR=ARM

// Check that we correctly lay out single-payload enums with a class reference
// payload as nullable pointers. <rdar://problem/16093103>

sil_stage canonical

import Builtin

class C {}
sil_vtable C {}

sil @$S11enum_32_bit1CCfD : $@convention(thin) (@owned C) -> ()

// CHECK-LABEL: %T11enum_32_bit3FooO = type <{ [4 x i8] }>
enum Foo {
  case A(C)
  case B
}

@objc protocol ClassExistential {}

// CHECK-LABEL: %T11enum_32_bit3BarO = type <{ [4 x i8] }>
enum Bar {
  case A(ClassExistential)
  case B
}

// CHECK-LABEL: %T11enum_32_bit3BasO = type <{ [4 x i8] }>
enum Bas {
  case A(ClassExistential)
  case B(C)
  case Z
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @foo(i32)
sil @foo : $@convention(thin) (@owned Foo) -> () {
entry(%0 : $Foo):
  return undef : $()
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @bar(i32)
sil @bar : $@convention(thin) (@owned Bar) -> () {
entry(%0 : $Bar):
  return undef : $()
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @bas(i32)
sil @bas : $@convention(thin) (@owned Bas) -> () {
entry(%0 : $Bas):
  return undef : $()
}

// Force instantiation of the IR types
sil @indirect_foo : $@convention(thin) (@in Foo) -> ()
sil @indirect_bar : $@convention(thin) (@in Bar) -> ()
sil @indirect_bas : $@convention(thin) (@in Bas) -> ()
