Files
swift-mirror/test/IRGen/async/run-call-void-to-struct_large.sil
Yuta Saito 8b4ce2c2ff [wasm][test] Remove unused argc/argv parameters from @main decl
In WebAssembly, `main` function is mangled differently depending on if
it takes argc/argv or not. If it doesn't take them, it's mangled to
`main` as well as other platforms, so remove unused argc/argv in
executable tests to avoid linkage failure.
2023-10-24 00:15:58 +00:00

157 lines
6.6 KiB
Plaintext

// RUN: %empty-directory(%t)
// RUN: %target-build-swift-dylib(%t/%target-library-name(PrintShims)) %S/../../Inputs/print-shims.swift -module-name PrintShims -emit-module -emit-module-path %t/PrintShims.swiftmodule
// RUN: %target-codesign %t/%target-library-name(PrintShims)
// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL
// RUN: %target-build-swift -g -parse-sil %s -module-name main -o %t/main -I %t -L %t -lPrintShims %target-rpath(%t)
// RUN: %target-codesign %t/main
// RUN: %target-run %t/main %t/%target-library-name(PrintShims) | %FileCheck %s
// REQUIRES: executable_test
// REQUIRES: swift_test_mode_optimize_none
// REQUIRES: concurrency
// REQUIRES: concurrency_runtime
// UNSUPPORTED: back_deployment_runtime
import Builtin
import Swift
import PrintShims
import _Concurrency
sil public_external @printGeneric : $@convention(thin) <T> (@in_guaranteed T) -> ()
struct Big {
@_hasStorage let i1: Int64 { get }
@_hasStorage let i2: Int64 { get }
@_hasStorage let i3: Int64 { get }
@_hasStorage let i4: Int64 { get }
@_hasStorage let i5: Int64 { get }
@_hasStorage let i6: Int64 { get }
@_hasStorage let i7: Int64 { get }
@_hasStorage let i8: Int64 { get }
@_hasStorage let i9: Int64 { get }
@_hasStorage let i0: Int64 { get }
init()
}
sil hidden @Big_init : $@convention(method) (@thin Big.Type) -> Big {
// %0 "$metatype"
bb0(%0 : $@thin Big.Type):
%1 = alloc_stack $Big, var, name "self"
%2 = integer_literal $Builtin.Int64, 1
%3 = struct $Int64 (%2 : $Builtin.Int64)
%4 = begin_access [modify] [static] %1 : $*Big
%5 = struct_element_addr %4 : $*Big, #Big.i1
store %3 to %5 : $*Int64
end_access %4 : $*Big
%8 = integer_literal $Builtin.Int64, 2
%9 = struct $Int64 (%8 : $Builtin.Int64)
%10 = begin_access [modify] [static] %1 : $*Big
%11 = struct_element_addr %10 : $*Big, #Big.i2
store %9 to %11 : $*Int64
end_access %10 : $*Big
%14 = integer_literal $Builtin.Int64, 3
%15 = struct $Int64 (%14 : $Builtin.Int64)
%16 = begin_access [modify] [static] %1 : $*Big
%17 = struct_element_addr %16 : $*Big, #Big.i3
store %15 to %17 : $*Int64
end_access %16 : $*Big
%20 = integer_literal $Builtin.Int64, 4
%21 = struct $Int64 (%20 : $Builtin.Int64)
%22 = begin_access [modify] [static] %1 : $*Big
%23 = struct_element_addr %22 : $*Big, #Big.i4
store %21 to %23 : $*Int64
end_access %22 : $*Big
%26 = integer_literal $Builtin.Int64, 5
%27 = struct $Int64 (%26 : $Builtin.Int64)
%28 = begin_access [modify] [static] %1 : $*Big
%29 = struct_element_addr %28 : $*Big, #Big.i5
store %27 to %29 : $*Int64
end_access %28 : $*Big
%32 = integer_literal $Builtin.Int64, 6
%33 = struct $Int64 (%32 : $Builtin.Int64)
%34 = begin_access [modify] [static] %1 : $*Big
%35 = struct_element_addr %34 : $*Big, #Big.i6
store %33 to %35 : $*Int64
end_access %34 : $*Big
%38 = integer_literal $Builtin.Int64, 7
%39 = struct $Int64 (%38 : $Builtin.Int64)
%40 = begin_access [modify] [static] %1 : $*Big
%41 = struct_element_addr %40 : $*Big, #Big.i7
store %39 to %41 : $*Int64
end_access %40 : $*Big
%44 = integer_literal $Builtin.Int64, 8
%45 = struct $Int64 (%44 : $Builtin.Int64)
%46 = begin_access [modify] [static] %1 : $*Big
%47 = struct_element_addr %46 : $*Big, #Big.i8
store %45 to %47 : $*Int64
end_access %46 : $*Big
%50 = integer_literal $Builtin.Int64, 9
%51 = struct $Int64 (%50 : $Builtin.Int64)
%52 = begin_access [modify] [static] %1 : $*Big
%53 = struct_element_addr %52 : $*Big, #Big.i9
store %51 to %53 : $*Int64
end_access %52 : $*Big
%56 = integer_literal $Builtin.Int64, 0
%57 = struct $Int64 (%56 : $Builtin.Int64)
%58 = begin_access [modify] [static] %1 : $*Big
%59 = struct_element_addr %58 : $*Big, #Big.i0
store %57 to %59 : $*Int64
end_access %58 : $*Big
%62 = struct $Big (%3 : $Int64, %9 : $Int64, %15 : $Int64, %21 : $Int64, %27 : $Int64, %33 : $Int64, %39 : $Int64, %45 : $Int64, %51 : $Int64, %57 : $Int64)
dealloc_stack %1 : $*Big
return %62 : $Big
}
// CHECK-LL: @getBigTu =
// CHECK-LL: define hidden swift{{(tail)?}}cc void @getBig
sil hidden @getBig : $@async @convention(thin) () -> Big {
bb0:
%0 = metatype $@thin Big.Type
// function_ref Big.init()
%1 = function_ref @Big_init : $@convention(method) (@thin Big.Type) -> Big
%2 = apply %1(%0) : $@convention(method) (@thin Big.Type) -> Big
return %2 : $Big
}
sil hidden @printBig : $@async @convention(thin) () -> () {
%getBig = function_ref @getBig : $@async @convention(thin) () -> Big
%big = apply %getBig() : $@async @convention(thin) () -> Big
%big_addr = alloc_stack $Big
store %big to %big_addr : $*Big
%print = function_ref @printGeneric : $@convention(thin) <T> (@in_guaranteed T) -> ()
%result = apply %print<Big>(%big_addr) : $@convention(thin) <T> (@in_guaranteed T) -> ()
dealloc_stack %big_addr : $*Big
%out = tuple ()
return %out : $()
}
sil @test_case : $@convention(thin) @async () -> () {
%printBig = function_ref @printBig : $@async @convention(thin) () -> ()
%result = apply %printBig() : $@async @convention(thin) () -> () // CHECK: Big(i1: 1, i2: 2, i3: 3, i4: 4, i5: 5, i6: 6, i7: 7, i8: 8, i9: 9, i0: 0)
%void = tuple()
return %void : $()
}
// Defined in _Concurrency
sil @$ss13_runAsyncMainyyyyYaKcF : $@convention(thin) (@guaranteed @async @callee_guaranteed () -> @error Error) -> ()
sil @no_throw_to_throw_think : $@convention(thin) @async (@guaranteed @async @callee_guaranteed () -> ()) -> @error Error {
bb0(%0 :$@async @callee_guaranteed () -> ()):
%void = apply %0() : $@async @callee_guaranteed () -> ()
return %void : $()
}
// main
sil @main : $@convention(c) () -> Int32 {
%test_case_nothrow = function_ref @test_case : $@convention(thin) @async () -> ()
%thick_test_case = thin_to_thick_function %test_case_nothrow : $@convention(thin) @async () -> () to $@callee_guaranteed @async () -> ()
%thunk = function_ref @no_throw_to_throw_think : $@convention(thin) @async (@guaranteed @async @callee_guaranteed () -> ()) -> @error Error
%throwing = partial_apply [callee_guaranteed] %thunk(%thick_test_case) : $@convention(thin) @async (@guaranteed @async @callee_guaranteed () -> ()) -> @error Error
%runAsyncMain = function_ref @$ss13_runAsyncMainyyyyYaKcF : $@convention(thin) (@guaranteed @async @callee_guaranteed () -> @error Error) -> ()
%result = apply %runAsyncMain(%throwing) : $@convention(thin) (@guaranteed @async @callee_guaranteed () -> @error Error) -> ()
%out_literal = integer_literal $Builtin.Int32, 0
%out = struct $Int32 (%out_literal : $Builtin.Int32)
return %out : $Int32
}