File tree Expand file tree Collapse file tree 4 files changed +46
-0
lines changed
test/Interop/Cxx/class/method Expand file tree Collapse file tree 4 files changed +46
-0
lines changed Original file line number Diff line number Diff line change @@ -3306,6 +3306,8 @@ llvm::CallBase *IRBuilder::CreateCallOrInvoke(
3306
3306
if (!ty)
3307
3307
ty = func->getParamStructRetType (argIndex);
3308
3308
builder.addStructRetAttr (ty);
3309
+ if (func->hasParamAttribute (argIndex, llvm::Attribute::InReg))
3310
+ builder.addAttribute (llvm::Attribute::InReg);
3309
3311
attrs = attrs.addParamAttributes (func->getContext (), argIndex, builder);
3310
3312
}
3311
3313
if (func->hasParamAttribute (argIndex, llvm::Attribute::ByVal)) {
Original file line number Diff line number Diff line change
1
+ #ifndef TEST_INTEROP_CXX_CLASS_METHOD_INREG_SRET_H
2
+ #define TEST_INTEROP_CXX_CLASS_METHOD_INREG_SRET_H
3
+
4
+ struct OptionalBridgedBasicBlock {
5
+ };
6
+
7
+ struct BridgedFunction {
8
+ OptionalBridgedBasicBlock getFirstBlock () const { return {}; }
9
+ };
10
+
11
+ #endif // TEST_INTEROP_CXX_CLASS_METHOD_INREG_SRET_H
Original file line number Diff line number Diff line change @@ -19,3 +19,8 @@ module SRetWinARM64 {
19
19
header "sret-win-arm64.h"
20
20
requires cplusplus
21
21
}
22
+
23
+ module InRegSRet {
24
+ header "inreg-sret.h"
25
+ requires cplusplus
26
+ }
Original file line number Diff line number Diff line change
1
+ // RUN: %target-swift-emit-irgen -I %S/Inputs -cxx-interoperability-mode=default %s | %FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-%target-cpu
2
+
3
+ // REQUIRES: OS=windows-msvc
4
+
5
+ import InRegSRet
6
+
7
+ final public class BasicBlock {
8
+ }
9
+
10
+ extension OptionalBridgedBasicBlock {
11
+ public var block : BasicBlock ? { nil }
12
+ }
13
+
14
+ final public class Function {
15
+ public var bridged : BridgedFunction {
16
+ BridgedFunction ( )
17
+ }
18
+
19
+ public var firstBlock : BasicBlock ? { bridged. getFirstBlock ( ) . block }
20
+ }
21
+
22
+ // Check that inreg on the sret isn't missing
23
+
24
+ // CHECK-x86_64: call void @"?getFirstBlock@BridgedFunction@@QEBA?AUOptionalBridgedBasicBlock@@XZ"(ptr {{.*}}, ptr sret(%struct.OptionalBridgedBasicBlock) {{.*}})
25
+ // CHECK-aarch64: call void @"?getFirstBlock@BridgedFunction@@QEBA?AUOptionalBridgedBasicBlock@@XZ"(ptr {{.*}}, ptr inreg sret(%struct.OptionalBridgedBasicBlock) {{.*}})
26
+
27
+ // CHECK-x86_64: define {{.*}} void @"?getFirstBlock@BridgedFunction@@QEBA?AUOptionalBridgedBasicBlock@@XZ"(ptr {{.*}} %{{.*}}, ptr noalias sret(%struct.OptionalBridgedBasicBlock) {{.*}} %{{.*}})
28
+ // CHECK-aarch64: define {{.*}} void @"?getFirstBlock@BridgedFunction@@QEBA?AUOptionalBridgedBasicBlock@@XZ"(ptr {{.*}} %{{.*}}, ptr inreg noalias sret(%struct.OptionalBridgedBasicBlock) {{.*}} %{{.*}})
You can’t perform that action at this time.
0 commit comments