| // RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil %s -aa-kind=typed-access-tb-aa -aa-dump -o /dev/null | %FileCheck %s |
| |
| // REQUIRES: asserts |
| |
| import Builtin |
| |
| /////////////////////// |
| // Type Declarations // |
| /////////////////////// |
| |
| class foo { |
| deinit |
| init() |
| } |
| |
| class boo : foo { |
| deinit |
| override init() |
| } |
| |
| class baz : foo { |
| deinit |
| override init() |
| } |
| |
| class goo : boo { |
| deinit |
| override init() |
| } |
| |
| sil @boo_init : $@convention(thin) (@thick boo.Type) -> @owned boo |
| sil @baz_init : $@convention(thin) (@thick baz.Type) -> @owned baz |
| sil @goo_init : $@convention(thin) (@thick goo.Type) -> @owned goo |
| |
| // CHECK-LABEL: no_parent_child_relation_reftype_tests |
| // CHECK: PAIR #1. |
| // CHECK-NEXT: %0 = alloc_stack $boo |
| // CHECK-NEXT: %1 = alloc_stack $baz |
| // CHECK-NEXT: NoAlias |
| sil hidden @no_parent_child_relation_reftype_tests : $@convention(thin) () -> () { |
| bb0: |
| %0 = alloc_stack $boo, var, name "a" // users: %5, %14 |
| %1 = alloc_stack $baz, var, name "b" // users: %9, %13 |
| %2 = function_ref @boo_init : $@convention(thin) (@thick boo.Type) -> @owned boo // user: %4 |
| %3 = metatype $@thick boo.Type // user: %4 |
| %4 = apply %2(%3) : $@convention(thin) (@thick boo.Type) -> @owned boo // users: %5, %11 |
| store %4 to %0 : $*boo // id: %5 |
| %6 = function_ref @baz_init : $@convention(thin) (@thick baz.Type) -> @owned baz // user: %8 |
| %7 = metatype $@thick baz.Type // user: %8 |
| %8 = apply %6(%7) : $@convention(thin) (@thick baz.Type) -> @owned baz // users: %9, %10 |
| store %8 to %1 : $*baz // id: %9 |
| strong_release %8 : $baz // id: %10 |
| strong_release %4 : $boo // id: %11 |
| %12 = tuple () // user: %15 |
| dealloc_stack %1 : $*baz // id: %13 |
| dealloc_stack %0 : $*boo // id: %14 |
| return %12 : $() // id: %15 |
| } |
| |
| // CHECK-LABEL: with_parent_child_relation_reftype_tests |
| |
| // CHECK: PAIR #33. |
| // CHECK-NEXT: %4 = apply %2(%3) : $@convention(thin) (@thick boo.Type) -> @owned boo |
| // CHECK-NEXT: %8 = apply %6(%7) : $@convention(thin) (@thick goo.Type) -> @owned goo |
| // CHECK-NEXT: MayAlias |
| sil hidden @with_parent_child_relation_reftype_tests : $@convention(thin) () -> () { |
| bb0: |
| %0 = alloc_stack $boo, var, name "a" // users: %5, %14 |
| %1 = alloc_stack $goo, var, name "b" // users: %9, %13 |
| %2 = function_ref @boo_init : $@convention(thin) (@thick boo.Type) -> @owned boo // user: %4 |
| %3 = metatype $@thick boo.Type // user: %4 |
| %4 = apply %2(%3) : $@convention(thin) (@thick boo.Type) -> @owned boo // users: %5, %11 |
| store %4 to %0 : $*boo // id: %5 |
| %6 = function_ref @goo_init : $@convention(thin) (@thick goo.Type) -> @owned goo // user: %8 |
| %7 = metatype $@thick goo.Type // user: %8 |
| %8 = apply %6(%7) : $@convention(thin) (@thick goo.Type) -> @owned goo // users: %9, %10 |
| store %8 to %1 : $*goo // id: %9 |
| strong_release %8 : $goo // id: %10 |
| strong_release %4 : $boo // id: %11 |
| %12 = tuple () // user: %15 |
| dealloc_stack %1 : $*goo // id: %13 |
| dealloc_stack %0 : $*boo // id: %14 |
| return %12 : $() // id: %15 |
| } |
| |
| // CHECK-LABEL: @builtin_test |
| |
| // Check that a raw pointer address may alias everything. |
| // CHECK: PAIR #134. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #135. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #136. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #137. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %11 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #138. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #139. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #140. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %14 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #141. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %15 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #142. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %16 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #143. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %17 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #144. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %18 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #145. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %19 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #146. |
| // CHECK-NEXT: %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: %20 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| // CHECK-NEXT: MayAlias |
| |
| // Now check that a native object address may: |
| // |
| // 1. May alias raw pointer addresses. |
| // 2. Not alias an unknown object. Objective-C objects are allocated differently |
| // than Swift objects and may not alias. |
| // 3. Does not alias scalar addresses. This can only occur via inttoptr and the |
| // like. Since we are using type oracles we are allowed to make the assumption |
| // that this type of type punning can be ignored. |
| // 4. May alias addresses to other Builtin.NativeObjects |
| |
| // CHECK: PAIR #149. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #150. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #151. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %11 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #152. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #153. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #154. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %14 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #155. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %15 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #156. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %16 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #157. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %17 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #158. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %18 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #159. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %19 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #160. |
| // CHECK-NEXT: %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: %20 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| // CHECK-NEXT: NoAlias |
| |
| // Check that unknown object addresses may only alias raw pointer addresses and |
| // other unknown object addresses. Anything else should be no alias. |
| // CHECK: PAIR #163. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #164. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %11 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #165. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #166. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #167. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %14 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #168. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %15 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #169. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %16 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #170. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %17 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #171. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %18 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #172. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %19 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #173. |
| // CHECK-NEXT: %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: %20 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| // CHECK-NEXT: NoAlias |
| |
| // Next check that Int8 addresses can only alias Int8 addresses and raw |
| // pointers. This includes ensuring that Int8 cannot alias Int32 addresses. |
| // CHECK: PAIR #176. |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: %11 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #177. |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #178. |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #179. |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: %14 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #180. |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: %15 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #181. |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: %16 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #182. |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: %17 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #183. |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: %18 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #184. |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: %19 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #185. |
| // CHECK-NEXT: %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: %20 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| // CHECK-NEXT: NoAlias |
| |
| // Finally conclude by checking that FPIEEE32 addresses only can alias raw |
| // pointer addresses and other FPIEEE32 addresses. Again this includes proving |
| // that FPIEEE64 addresses cannot alias FPIEEE32. |
| // CHECK: PAIR #199. |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #200. |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: %14 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #201. |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: %15 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #202. |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: %16 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #203. |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: %17 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #204. |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: %18 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #205. |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: %19 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #206. |
| // CHECK-NEXT: %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: %20 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| // CHECK-NEXT: NoAlias |
| |
| sil @builtin_test : $@convention(thin) () -> () { |
| bb0: |
| %0 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer> |
| %1 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject> |
| %2 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject> |
| %3 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int8> |
| %4 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int32> |
| %5 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32> |
| %6 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64> |
| |
| %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| %11 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| |
| // This second block ensures that we gain the benefits of not repeating |
| // already known values with being able to have associated with the output for |
| // each type each of the items we are trying to check aliasing against. This |
| // makes it simpler to write these tests. |
| %14 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| %15 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| %16 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| %17 = project_box %3 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| %18 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| %19 = project_box %5 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| %20 = project_box %6 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0 |
| |
| %21 = tuple() |
| return %21 : $() |
| } |
| |
| // Make sure that struct addresses: |
| // |
| // 1. Alias address types that they contain. |
| // 2. Do not alias address types that they do not contain. |
| // 3. Do not alias Builtin.ObjectPointers. |
| // 4. Aliases raw pointers. |
| |
| // CHECK-LABEL: @struct_tests |
| // CHECK: PAIR #339. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %14 = project_box %0 : $<τ_0_0> { var τ_0_0 } <STest_S1>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #340. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %15 = project_box %1 : $<τ_0_0> { var τ_0_0 } <STest_S2>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #341. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %16 = project_box %2 : $<τ_0_0> { var τ_0_0 } <STest_E1>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #342. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %17 = project_box %3 : $<τ_0_0> { var τ_0_0 } <STest_E2>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #343. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %18 = project_box %4 : $<τ_0_0> { var τ_0_0 } <STest_C1>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #344. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %19 = project_box %5 : $<τ_0_0> { var τ_0_0 } <STest_C2>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #345. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %20 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #351. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %26 = project_box %21 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #352. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %27 = project_box %22 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #353. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %28 = project_box %23 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #354. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %29 = project_box %24 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #355. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| // CHECK-NEXT: %30 = project_box %25 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| |
| struct STest_S1 { |
| var a : Builtin.Int32 |
| } |
| struct STest_S2 { |
| var b : Builtin.Int34 |
| } |
| enum STest_E1 { |
| case Yes(STest_S1) |
| case No |
| } |
| enum STest_E2 { |
| case Yes(STest_S2) |
| case No |
| } |
| class STest_C1 { |
| var a : Builtin.Int32 |
| |
| init() |
| } |
| class STest_C2 { |
| var a : Builtin.Int64 |
| |
| init() |
| } |
| struct STest_S3 { |
| var s : STest_S1 |
| var e : STest_E1 |
| var c : STest_C1 |
| } |
| |
| sil @struct_tests : $@convention(thin) () -> () { |
| |
| %0 = alloc_box $<τ_0_0> { var τ_0_0 } <STest_S1> |
| %1 = alloc_box $<τ_0_0> { var τ_0_0 } <STest_S2> |
| %2 = alloc_box $<τ_0_0> { var τ_0_0 } <STest_E1> |
| %3 = alloc_box $<τ_0_0> { var τ_0_0 } <STest_E2> |
| %4 = alloc_box $<τ_0_0> { var τ_0_0 } <STest_C1> |
| %5 = alloc_box $<τ_0_0> { var τ_0_0 } <STest_C2> |
| %6 = alloc_box $<τ_0_0> { var τ_0_0 } <STest_S3> |
| |
| %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <STest_S1>, 0 |
| %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <STest_S2>, 0 |
| %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <STest_E1>, 0 |
| %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <STest_E2>, 0 |
| %11 = project_box %4 : $<τ_0_0> { var τ_0_0 } <STest_C1>, 0 |
| %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <STest_C2>, 0 |
| %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| |
| %14 = project_box %0 : $<τ_0_0> { var τ_0_0 } <STest_S1>, 0 |
| %15 = project_box %1 : $<τ_0_0> { var τ_0_0 } <STest_S2>, 0 |
| %16 = project_box %2 : $<τ_0_0> { var τ_0_0 } <STest_E1>, 0 |
| %17 = project_box %3 : $<τ_0_0> { var τ_0_0 } <STest_E2>, 0 |
| %18 = project_box %4 : $<τ_0_0> { var τ_0_0 } <STest_C1>, 0 |
| %19 = project_box %5 : $<τ_0_0> { var τ_0_0 } <STest_C2>, 0 |
| %20 = project_box %6 : $<τ_0_0> { var τ_0_0 } <STest_S3>, 0 |
| |
| %21 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer> |
| %22 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject> |
| %23 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject> |
| %24 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int32> |
| %25 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32> |
| |
| %26 = project_box %21 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| %27 = project_box %22 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| %28 = project_box %23 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| %29 = project_box %24 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| %30 = project_box %25 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| |
| %9999 = tuple() |
| return %9999 : $() |
| } |
| |
| // CHECK-LABEL: @enum_tests |
| // CHECK: PAIR #339. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %14 = project_box %0 : $<τ_0_0> { var τ_0_0 } <ETest_S1>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #340. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %15 = project_box %1 : $<τ_0_0> { var τ_0_0 } <ETest_S2>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #341. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %16 = project_box %2 : $<τ_0_0> { var τ_0_0 } <ETest_E1>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #342. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %17 = project_box %3 : $<τ_0_0> { var τ_0_0 } <ETest_E2>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #343. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %18 = project_box %4 : $<τ_0_0> { var τ_0_0 } <ETest_C1>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #344. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %19 = project_box %5 : $<τ_0_0> { var τ_0_0 } <ETest_C2>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #345. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %20 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #351. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %26 = project_box %21 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #352. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %27 = project_box %22 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #353. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %28 = project_box %23 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #354. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %29 = project_box %24 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #355. |
| // CHECK-NEXT: %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| // CHECK-NEXT: %30 = project_box %25 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| |
| struct ETest_S1 { |
| var a : Builtin.Int32 |
| } |
| struct ETest_S2 { |
| var b : Builtin.Int34 |
| } |
| enum ETest_E1 { |
| case Yes(ETest_S1) |
| case No |
| } |
| enum ETest_E2 { |
| case Yes(ETest_S2) |
| case No |
| } |
| class ETest_C1 { |
| var a : Builtin.Int32 |
| |
| init() |
| } |
| class ETest_C2 { |
| var a : Builtin.Int64 |
| |
| init() |
| } |
| enum ETest_E3 { |
| case S(ETest_S1) |
| case E(ETest_E1) |
| case C(ETest_C1) |
| case Unknown |
| } |
| |
| sil @enum_tests : $@convention(thin) () -> () { |
| %0 = alloc_box $<τ_0_0> { var τ_0_0 } <ETest_S1> |
| %1 = alloc_box $<τ_0_0> { var τ_0_0 } <ETest_S2> |
| %2 = alloc_box $<τ_0_0> { var τ_0_0 } <ETest_E1> |
| %3 = alloc_box $<τ_0_0> { var τ_0_0 } <ETest_E2> |
| %4 = alloc_box $<τ_0_0> { var τ_0_0 } <ETest_C1> |
| %5 = alloc_box $<τ_0_0> { var τ_0_0 } <ETest_C2> |
| %6 = alloc_box $<τ_0_0> { var τ_0_0 } <ETest_E3> |
| |
| %7 = project_box %0 : $<τ_0_0> { var τ_0_0 } <ETest_S1>, 0 |
| %8 = project_box %1 : $<τ_0_0> { var τ_0_0 } <ETest_S2>, 0 |
| %9 = project_box %2 : $<τ_0_0> { var τ_0_0 } <ETest_E1>, 0 |
| %10 = project_box %3 : $<τ_0_0> { var τ_0_0 } <ETest_E2>, 0 |
| %11 = project_box %4 : $<τ_0_0> { var τ_0_0 } <ETest_C1>, 0 |
| %12 = project_box %5 : $<τ_0_0> { var τ_0_0 } <ETest_C2>, 0 |
| %13 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| |
| %14 = project_box %0 : $<τ_0_0> { var τ_0_0 } <ETest_S1>, 0 |
| %15 = project_box %1 : $<τ_0_0> { var τ_0_0 } <ETest_S2>, 0 |
| %16 = project_box %2 : $<τ_0_0> { var τ_0_0 } <ETest_E1>, 0 |
| %17 = project_box %3 : $<τ_0_0> { var τ_0_0 } <ETest_E2>, 0 |
| %18 = project_box %4 : $<τ_0_0> { var τ_0_0 } <ETest_C1>, 0 |
| %19 = project_box %5 : $<τ_0_0> { var τ_0_0 } <ETest_C2>, 0 |
| %20 = project_box %6 : $<τ_0_0> { var τ_0_0 } <ETest_E3>, 0 |
| |
| %21 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer> |
| %22 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject> |
| %23 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject> |
| %24 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int32> |
| %25 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32> |
| |
| %26 = project_box %21 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| %27 = project_box %22 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| %28 = project_box %23 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| %29 = project_box %24 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| %30 = project_box %25 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| |
| %9999 = tuple() |
| return %9999 : $() |
| } |
| |
| // CHECK-LABEL: @class_tests |
| |
| // CHECK: PAIR #72. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: %6 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #73. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: %7 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #74. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: %8 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #82. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: %16 = project_box %9 : $<τ_0_0> { var τ_0_0 } <AnyObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #83. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: %17 = project_box %10 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #84. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: %18 = project_box %11 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #85. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: %19 = project_box %12 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #86. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: %20 = project_box %13 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #87. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: %21 = project_box %14 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #88. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: %22 = project_box %15 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| |
| // CHECK: PAIR #91. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #92. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %6 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #93. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %7 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #94. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %8 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #102. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %16 = project_box %9 : $<τ_0_0> { var τ_0_0 } <AnyObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #103. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %17 = project_box %10 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #104. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %18 = project_box %11 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #105. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %19 = project_box %12 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #106. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %20 = project_box %13 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #107. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %21 = project_box %14 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #108. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: %22 = project_box %15 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| |
| // CHECK: PAIR #111. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: %6 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #112. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: %7 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #113. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: %8 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #121. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: %16 = project_box %9 : $<τ_0_0> { var τ_0_0 } <AnyObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #122. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: %17 = project_box %10 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #123. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: %18 = project_box %11 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #124. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: %19 = project_box %12 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #125. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: %20 = project_box %13 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #126. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: %21 = project_box %14 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #127. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| // CHECK-NEXT: %22 = project_box %15 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| |
| class CTest_C1 { |
| var x : Builtin.Int32 |
| |
| init() |
| } |
| |
| class CTest_C2 { |
| var z : Builtin.FPIEEE32 |
| |
| init() |
| } |
| |
| class CTest_C3 : CTest_C1 { |
| var y : Builtin.Int8 |
| |
| override init() |
| } |
| |
| protocol AnyObject {} |
| |
| sil @class_tests : $@convention(thin) () -> () { |
| %0 = alloc_box $<τ_0_0> { var τ_0_0 } <CTest_C1> |
| %1 = alloc_box $<τ_0_0> { var τ_0_0 } <CTest_C2> |
| %2 = alloc_box $<τ_0_0> { var τ_0_0 } <CTest_C3> |
| |
| %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| |
| %6 = project_box %0 : $<τ_0_0> { var τ_0_0 } <CTest_C1>, 0 |
| %7 = project_box %1 : $<τ_0_0> { var τ_0_0 } <CTest_C2>, 0 |
| %8 = project_box %2 : $<τ_0_0> { var τ_0_0 } <CTest_C3>, 0 |
| |
| %9 = alloc_box $<τ_0_0> { var τ_0_0 } <AnyObject> |
| %10 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer> |
| %11 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject> |
| %12 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject> |
| %13 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int8> |
| %14 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int32> |
| %15 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32> |
| |
| %16 = project_box %9 : $<τ_0_0> { var τ_0_0 } <AnyObject>, 0 |
| %17 = project_box %10 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| %18 = project_box %11 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| %19 = project_box %12 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| %20 = project_box %13 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| %21 = project_box %14 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| %22 = project_box %15 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| |
| %9999 = tuple() |
| return %9999 : $() |
| } |
| |
| // CHECK-LABEL: @tuple_tests |
| // CHECK: PAIR #66. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %6 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #67. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %7 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #68. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %8 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #75. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %15 = project_box %9 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #76. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %16 = project_box %10 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #77. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %17 = project_box %11 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #78. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %18 = project_box %12 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #79. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %19 = project_box %13 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #80. |
| // CHECK-NEXT: %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %20 = project_box %14 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #85. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %7 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #86. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %8 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #93. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %15 = project_box %9 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #94. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %16 = project_box %10 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #95. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %17 = project_box %11 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #96. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %18 = project_box %12 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #97. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %19 = project_box %13 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #98. |
| // CHECK-NEXT: %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %20 = project_box %14 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #102. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %7 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #103. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %8 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #110. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %15 = project_box %9 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #111. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %16 = project_box %10 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #112. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %17 = project_box %11 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #113. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %18 = project_box %12 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #114. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %19 = project_box %13 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #115. |
| // CHECK-NEXT: %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| // CHECK-NEXT: %20 = project_box %14 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| // CHECK-NEXT: NoAlias |
| |
| struct TTest_S1 { |
| var x : Builtin.Int32 |
| } |
| |
| enum TTest_E1 { |
| case No |
| case Yes(Builtin.Int8) |
| } |
| |
| sil @tuple_tests : $@convention(thin) () -> () { |
| %0 = alloc_box $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)> |
| %1 = alloc_box $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)> |
| %2 = alloc_box $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)> |
| |
| %3 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| %4 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| %5 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| |
| %6 = project_box %0 : $<τ_0_0> { var τ_0_0 } <(Builtin.RawPointer, Builtin.Int64)>, 0 |
| %7 = project_box %1 : $<τ_0_0> { var τ_0_0 } <(TTest_S1, Builtin.Int64)>, 0 |
| %8 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TTest_E1, Builtin.Int64)>, 0 |
| |
| %9 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer> |
| %10 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject> |
| %11 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject> |
| %12 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int8> |
| %13 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int32> |
| %14 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32> |
| |
| %15 = project_box %9 : $<τ_0_0> { var τ_0_0 } <Builtin.RawPointer>, 0 |
| %16 = project_box %10 : $<τ_0_0> { var τ_0_0 } <Builtin.NativeObject>, 0 |
| %17 = project_box %11 : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0 |
| %18 = project_box %12 : $<τ_0_0> { var τ_0_0 } <Builtin.Int8>, 0 |
| %19 = project_box %13 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| %20 = project_box %14 : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE32>, 0 |
| |
| %9999 = tuple() |
| return %9999 : $() |
| } |
| |
| // Check that TBAA fails when the root is unchecked_addr_cast or |
| // pointer_to_address without [strict]. |
| // |
| // CHECK-LABEL: @tbaa_dump |
| // CHECK: PAIR #2. |
| // CHECK-NEXT: %0 = argument of bb0 : $*Builtin.Int64 |
| // CHECK-NEXT: %3 = unchecked_addr_cast %0 : $*Builtin.Int64 to $*Builtin.Int32 |
| // CHECK-NEXT: MayAlias |
| // CHECK: PAIR #5. |
| // CHECK-NEXT: %0 = argument of bb0 : $*Builtin.Int64 |
| // CHECK-NEXT: %7 = pointer_to_address %6 : $Builtin.RawPointer to [strict] $*Builtin.Int32 |
| // CHECK-NEXT: NoAlias |
| // CHECK: PAIR #6. |
| // CHECK-NEXT: %0 = argument of bb0 : $*Builtin.Int64 |
| // CHECK-NEXT: %9 = pointer_to_address %6 : $Builtin.RawPointer to $*Builtin.Int32 |
| // CHECK-NEXT: MayAlias |
| sil @tbaa_dump : $@convention(thin) (@in Builtin.Int64) -> Builtin.Int64 { |
| bb0(%0 : $*Builtin.Int64): |
| %1 = integer_literal $Builtin.Int64, 42 |
| store %1 to %0 : $*Builtin.Int64 |
| %3 = unchecked_addr_cast %0 : $*Builtin.Int64 to $*Builtin.Int32 |
| %4 = integer_literal $Builtin.Int32, 0 |
| store %4 to %3 : $*Builtin.Int32 |
| %6 = address_to_pointer %0 : $*Builtin.Int64 to $Builtin.RawPointer |
| %7 = pointer_to_address %6 : $Builtin.RawPointer to [strict] $*Builtin.Int32 |
| store %4 to %7 : $*Builtin.Int32 |
| %9 = pointer_to_address %6 : $Builtin.RawPointer to $*Builtin.Int32 |
| store %4 to %9 : $*Builtin.Int32 |
| %10 = load %0 : $*Builtin.Int64 |
| return %10 : $Builtin.Int64 |
| } |
| |
| // CHECK-LABEL: @test_project_box |
| // CHECK: PAIR #10. |
| // CHECK-NEXT: %2 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| // CHECK-NEXT: %3 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.Int64>, 0 |
| // CHECK-NEXT: NoAlias |
| sil @test_project_box : $@convention(thin) (<τ_0_0> { var τ_0_0 } <Builtin.Int32>, <τ_0_0> { var τ_0_0 } <Builtin.Int64>) -> () { |
| bb0(%0 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, %1 : $<τ_0_0> { var τ_0_0 } <Builtin.Int64>): |
| %2 = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0 |
| %3 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Builtin.Int64>, 0 |
| |
| %r = tuple() |
| return %r : $() |
| } |
| |
| // CHECK-LABEL: @test_ref_tail_addr |
| // CHECK: PAIR #10. |
| // CHECK-NEXT: %2 = ref_element_addr %0 : $CTest_C1, #CTest_C1.x |
| // CHECK-NEXT: %3 = ref_tail_addr %1 : $CTest_C1, $Builtin.Int16 |
| // CHECK-NEXT: NoAlias |
| sil @test_ref_tail_addr : $@convention(thin) (CTest_C1, CTest_C1) -> () { |
| bb0(%0 : $CTest_C1, %1 : $CTest_C1): |
| %2 = ref_element_addr %0 : $CTest_C1, #CTest_C1.x |
| %3 = ref_tail_addr %1 : $CTest_C1, $Builtin.Int16 |
| |
| %r = tuple() |
| return %r : $() |
| } |