From f48f77239638b798cffa1f9595f6e659472b0b16 Mon Sep 17 00:00:00 2001 From: Tim Kientzle Date: Wed, 29 Jan 2025 18:52:17 -0800 Subject: [PATCH 1/2] Test for #78981 **Without #78981**: This test triggers "Reflection section too small to contain next record" errors, indicating that the field information is broken. **With #78981**: This test runs to completion without triggering the error message above. --- validation-test/Reflection/reflect_Cxx.swift | 59 ++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 validation-test/Reflection/reflect_Cxx.swift diff --git a/validation-test/Reflection/reflect_Cxx.swift b/validation-test/Reflection/reflect_Cxx.swift new file mode 100644 index 0000000000000..1d3248e94fa75 --- /dev/null +++ b/validation-test/Reflection/reflect_Cxx.swift @@ -0,0 +1,59 @@ +// RUN: %empty-directory(%t) +// RUN: split-file %s %t +// %target-clangxx -c %S/Inputs/Cxx/pimpl.cpp -I %S/Inputs/Cxx -o %t/pimpl.o +// RUN: %target-build-swift -lswiftSwiftReflectionTest %t/reflect_Cxx.swift -I %t -cxx-interoperability-mode=default -o %t/reflect_Cxx +// RUN: %target-codesign %t/reflect_Cxx + +// RUN: %target-run %target-swift-reflection-test %t/reflect_Cxx | tee /dev/stderr | %FileCheck %s + +// REQUIRES: reflection_test_support +// REQUIRES: executable_test +// UNSUPPORTED: use_os_stdlib +// UNSUPPORTED: asan + +//--- module.modulemap + +module CxxStruct { + header "CxxStruct.h" + requires cplusplus + export * +} + +//--- CxxStruct.h + +struct CxxStructA { +private: + int i; +}; + +inline CxxStructA createCxxStructA() { + return CxxStructA(); +} + +//--- reflect_Cxx.swift + +import SwiftReflectionTest +import CxxStruct + +// Trigger type metadata to be emitted by conforming C++ types to a Swift protocol. +protocol MyProto {} +extension CxxStructA : MyProto {} + +let a = createCxxStructA() +reflect(any: a) + +// CHECK: Reflecting an existential. +// CHECK-NEXT: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}} +// CHECK-NEXT: Type reference: +// CHECK-NEXT: (struct __C.CxxStructA) + +// CHECK: Type info: +// CHECK-NEXT: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0 bitwise_takable=1) +// CHECK-NEXT: Mangled name: $sSo10CxxStructAV +// CHECK-NEXT: Demangled name: __C.CxxStructA + +// CHECK: Start of instance data: 0x{{[0-9a-fA-F]+}} + +doneReflecting() + +// CHECK: Done. From bf624b14615d361a68ba681d12bec3578c615353 Mon Sep 17 00:00:00 2001 From: Tim Kientzle Date: Thu, 30 Jan 2025 08:57:38 -0800 Subject: [PATCH 2/2] Fine-tune what environments should run this test --- validation-test/Reflection/reflect_Cxx.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/validation-test/Reflection/reflect_Cxx.swift b/validation-test/Reflection/reflect_Cxx.swift index 1d3248e94fa75..8eeca12a6083c 100644 --- a/validation-test/Reflection/reflect_Cxx.swift +++ b/validation-test/Reflection/reflect_Cxx.swift @@ -8,6 +8,7 @@ // REQUIRES: reflection_test_support // REQUIRES: executable_test +// UNSUPPORTED: back_deployment_runtime // UNSUPPORTED: use_os_stdlib // UNSUPPORTED: asan