| // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-ir %s | %FileCheck %s |
| //sil_stage canonical |
| |
| import Builtin |
| import Swift |
| import SwiftShims |
| |
| private class XXX{} |
| |
| sil @XXX_dtor : $@convention(method) (@owned XXX) -> () |
| sil @XXX_ctor : $@convention(method) (@owned XXX) -> @owned XXX |
| |
| // CHECK: target datalayout |
| |
| // No @owned or @out parameters -- function is not read only at LLVM level, |
| // because Swift level read only attribute is not automatically mapped |
| // to the LLVM read only attribute, unless IRGen can prove by analyzing |
| // the function body that this function is really read only. |
| |
| // CHECK-NOT: ; Function Attrs: readonly |
| // CHECK: define{{( protected)?}} swiftcc void @function_foo( |
| sil [readonly] @function_foo : $@convention(thin) (Int) -> () { |
| bb0(%0 : $Int): |
| %1 = tuple () |
| return %1 : $() |
| } |
| |
| // No @owned or @out parameters -- function is not read only at LLVM level, |
| // because Swift level read none attribute is not automatically mapped |
| // to the LLVM read only attribute, unless IRGen can prove by analyzing |
| // the function body that this function is really read only or read none. |
| |
| // CHECK-NOT: ; Function Attrs: readonly |
| // CHECK: define{{( protected)?}} swiftcc void @function_foo2( |
| sil [readnone] @function_foo2 : $@convention(thin) (Int) -> () { |
| bb0(%0 : $Int): |
| %1 = tuple () |
| return %1 : $() |
| } |
| |
| // There's an @owned parameter, and destructors can call arbitrary code |
| // -- function is not read only at LLVM level |
| |
| // CHECK-NOT: ; Function Attrs: readonly |
| // CHECK: define{{( protected)?}} swiftcc void @function_bar( |
| sil [readonly] @function_bar : $@convention(thin) (@owned XXX) -> () { |
| bb0(%0 : $XXX): |
| strong_release %0 : $XXX |
| %1 = tuple () |
| return %1 : $() |
| } |
| |
| // There's an @out parameter -- function is not read only at LLVM level |
| |
| // CHECK-NOT: ; Function Attrs: readonly |
| // CHECK: define{{( protected)?}} swiftcc void @function_baz( |
| sil [readonly] @function_baz : $@convention(thin) () -> (@out Any) { |
| bb0(%0 : $*Any): |
| init_existential_addr %0 : $*Any, $() |
| %1 = tuple () |
| return %1 : $() |
| } |
| |
| sil_vtable XXX { |
| #XXX.deinit!deallocator: XXX_dtor |
| #XXX.init!initializer.1: XXX_ctor |
| } |