Skip to content

Commit 0d2deb5

Browse files
authored
Merge pull request #69524 from hyp/eng/5.10/reininlien-getTypeMetadata
5.10: [interop][SwiftToCxx] Use 'SWIFT_INLINE_PRIVATE_HELPER' for getTypeMetadata helper to avoid emitting a reference to it when 'DEBUG' macro is set
2 parents 31ecef1 + 43a2a84 commit 0d2deb5

7 files changed

+49
-7
lines changed

lib/PrintAsClang/PrintClangValueType.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,7 @@ void ClangValueTypePrinter::printTypeGenericTraits(
651651
}
652652
os << "> {\n";
653653
os << " static ";
654-
ClangSyntaxPrinter(os).printInlineForThunk();
654+
ClangSyntaxPrinter(os).printInlineForHelperFunction();
655655
os << "void * _Nonnull getTypeMetadata() {\n";
656656
os << " return ";
657657
if (!typeDecl->hasClangNode()) {

test/Interop/CxxToSwiftToCxx/bridge-cxx-struct-back-to-cxx.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public struct Strct {
202202
// CHECK-NEXT: static inline const constexpr bool isUsableInGenericContext<ns::NonTrivialTemplateInt> = true;
203203
// CHECK-NEXT: template<>
204204
// CHECK-NEXT: struct TypeMetadataTrait<ns::NonTrivialTemplateInt> {
205-
// CHECK-NEXT: static SWIFT_INLINE_THUNK void * _Nonnull getTypeMetadata() {
205+
// CHECK-NEXT: static SWIFT_INLINE_PRIVATE_HELPER void * _Nonnull getTypeMetadata() {
206206
// CHECK-NEXT: return _impl::$sSo2nsO0030NonTrivialTemplateCInt_hHAFhrbVMa(0)._0;
207207
// CHECK-NEXT: }
208208
// CHECK-NEXT: };
@@ -241,7 +241,7 @@ public struct Strct {
241241
// CHECK-NEXT: static inline const constexpr bool isUsableInGenericContext<ns::NonTrivialTemplateTrivial> = true;
242242
// CHECK-NEXT: template<>
243243
// CHECK-NEXT: struct TypeMetadataTrait<ns::NonTrivialTemplateTrivial> {
244-
// CHECK-NEXT: static SWIFT_INLINE_THUNK void * _Nonnull getTypeMetadata() {
244+
// CHECK-NEXT: static SWIFT_INLINE_PRIVATE_HELPER void * _Nonnull getTypeMetadata() {
245245
// CHECK-NEXT: return _impl::$sSo2nsO0037NonTrivialTemplateTrivialinNS_CsGGkdcVMa(0)._0;
246246
// CHECK-NEXT: }
247247
// CHECK-NEXT: };
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: split-file %s %t
3+
4+
// RUN: %target-swift-frontend -typecheck %t/use-cxx-types.swift -typecheck -module-name UseCxx -emit-clang-header-path %t/UseCxx.h -I %t -enable-experimental-cxx-interop -clang-header-expose-decls=all-public
5+
6+
// Use the 'DEBUG' flug to force llvm used
7+
// RUN: %target-interop-build-clangxx -std=c++20 -c %t/use-swift-cxx-types.cpp -I %t -o %t/swift-cxx-execution.o -DDEBUG
8+
// RUN: %target-interop-build-swift %t/use-cxx-types.swift -o %t/swift-cxx-execution -Xlinker %t/swift-cxx-execution.o -module-name UseCxx -Xfrontend -entry-point-function-name -Xfrontend swiftMain -I %t
9+
10+
//--- header.h
11+
12+
struct CxxStruct {
13+
inline CxxStruct(int x) : x(x) {}
14+
inline CxxStruct(const CxxStruct &other) : x(other.x) {}
15+
inline ~CxxStruct() {}
16+
17+
int x;
18+
};
19+
20+
//--- module.modulemap
21+
module CxxTest {
22+
header "header.h"
23+
requires cplusplus
24+
}
25+
26+
//--- use-cxx-types.swift
27+
import CxxTest
28+
29+
public func retCxxStruct() -> CxxStruct {
30+
return CxxStruct(2)
31+
}
32+
33+
//--- use-swift-cxx-types.cpp
34+
35+
#include "header.h"
36+
#include "UseCxx.h"
37+
#include <assert.h>
38+
39+
int main() {
40+
auto x = UseCxx::retCxxStruct();
41+
return 0;
42+
}

test/Interop/SwiftToCxx/class/swift-class-in-cxx.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public final class ClassWithIntField {
8989
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
9090
// CHECK-NEXT: template<>
9191
// CHECK-NEXT: struct TypeMetadataTrait<Class::ClassWithIntField> {
92-
// CHECK-NEXT: SWIFT_INLINE_THUNK void * _Nonnull getTypeMetadata() {
92+
// CHECK-NEXT: SWIFT_INLINE_PRIVATE_HELPER void * _Nonnull getTypeMetadata() {
9393
// CHECK-NEXT: return Class::_impl::$s5Class0A12WithIntFieldCMa(0)._0;
9494
// CHECK-NEXT: }
9595
// CHECK-NEXT: };

test/Interop/SwiftToCxx/generics/generic-struct-in-cxx.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public func inoutConcretePair(_ x: UInt16, _ y: inout GenericPair<UInt16, UInt16
275275
// CHECK-NEXT: requires swift::isUsableInGenericContext<T_0_0> && swift::isUsableInGenericContext<T_0_1>
276276
// CHECK-NEXT: #endif
277277
// CHECK-NEXT: struct TypeMetadataTrait<Generics::GenericPair<T_0_0, T_0_1>> {
278-
// CHECK-NEXT: static SWIFT_INLINE_THUNK void * _Nonnull getTypeMetadata() {
278+
// CHECK-NEXT: static SWIFT_INLINE_PRIVATE_HELPER void * _Nonnull getTypeMetadata() {
279279
// CHECK-NEXT: return Generics::_impl::$s8Generics11GenericPairVMa(0, swift::TypeMetadataTrait<T_0_0>::getTypeMetadata(), swift::TypeMetadataTrait<T_0_1>::getTypeMetadata())._0;
280280
// CHECK-NEXT: }
281281
// CHECK-NEXT: };

test/Interop/SwiftToCxx/structs/resilient-struct-in-cxx.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public struct FirstSmallStruct {
8585
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
8686
// CHECK-NEXT: template<>
8787
// CHECK-NEXT: struct TypeMetadataTrait<Structs::FirstSmallStruct> {
88-
// CHECK-NEXT: SWIFT_INLINE_THUNK void * _Nonnull getTypeMetadata() {
88+
// CHECK-NEXT: SWIFT_INLINE_PRIVATE_HELPER void * _Nonnull getTypeMetadata() {
8989
// CHECK-NEXT: return Structs::_impl::$s7Structs16FirstSmallStructVMa(0)._0;
9090
// CHECK-NEXT: }
9191
// CHECK-NEXT: };

test/Interop/SwiftToCxx/structs/swift-struct-in-cxx.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
107107
// CHECK-NEXT: template<>
108108
// CHECK-NEXT: struct TypeMetadataTrait<Structs::StructWithIntField>
109-
// CHECK-NEXT: SWIFT_INLINE_THUNK void * _Nonnull getTypeMetadata() {
109+
// CHECK-NEXT: SWIFT_INLINE_PRIVATE_HELPER void * _Nonnull getTypeMetadata() {
110110
// CHECK-NEXT: return Structs::_impl::$s7Structs18StructWithIntFieldVMa(0)._0;
111111
// CHECK-NEXT: }
112112
// CHECK-NEXT: };

0 commit comments

Comments
 (0)