| // RUN: %target-swift-frontend %s -emit-silgen -disable-objc-attr-requires-foundation-module | FileCheck %s |
| |
| // rdar://15763213 |
| // Make sure that we can parse SILDeclRef to an overloaded member. |
| |
| import Swift |
| import Builtin |
| |
| struct A { |
| init() |
| } |
| |
| @objc class X { |
| init(a: A) |
| init(a1: A, a2: A) |
| } |
| |
| // CHECK-LABEL: sil @_TFCSo1XcfMS_FT1aV11peer_method1A_S_ |
| sil @_TFCSo1XcfMS_FT1aV11peer_method1A_S_ : $@convention(method) (A, @owned X) -> @owned X { |
| bb0(%0 : $A, %1 : $X): |
| %2 = alloc_box $X |
| %2a = project_box %2 : $@box X |
| %3 = alloc_box $A |
| %3a = project_box %3 : $@box A |
| store %0 to %3a : $*A |
| %5 = mark_uninitialized [delegatingself] %1 : $X |
| store %5 to %2a : $*X |
| %7 = load %2a : $*X |
| strong_retain %7 : $X |
| // CHECK: class_method [volatile] %{{[0-9]+}} : $X, #X.init!initializer.1.foreign : (X.Type) -> (A, A) -> X , $@convention(objc_method) (A, A, @owned X) -> @owned X |
| %9 = class_method [volatile] %7 : $X, #X.init!initializer.1.foreign : (X.Type) -> (A, A) -> X , $@convention(objc_method) (A, A, @owned X) -> @owned X |
| %10 = load %3a : $*A |
| %11 = load %3a : $*A |
| %12 = apply %9(%10, %11, %7) : $@convention(objc_method) (A, A, @owned X) -> @owned X |
| assign %12 to %2a : $*X |
| strong_release %3 : $@box A |
| %15 = load %2a : $*X |
| strong_retain %15 : $X |
| strong_release %2 : $@box X |
| return %15 : $X |
| } |