Files
swift-mirror/test/Interop/Cxx/class/memberwise-initializer-module-interface.swift
Egor Zhdan 9c22a7a530 [cxx-interop] Memberwise init is not synthesized for C++ type with templated using decl
When Swift fails to import a member of a struct, it checks to see if this member could affect the memory layout of the struct, and if it can, Swift doesn't synthesize the memberwise initializer for this struct. This logic was overly restrictive and treated templated using-decls as potentially affecting the memory layout of the struct.

rdar://113044949
2023-07-28 19:53:59 +01:00

55 lines
1.8 KiB
Swift

// RUN: %target-swift-ide-test -print-module -module-to-print=MemberwiseInitializer -I %S/Inputs -source-filename=x -enable-experimental-cxx-interop | %FileCheck %s
// CHECK: struct StructPrivateOnly {
// CHECK-NEXT: init()
// CHECK-NEXT: }
// CHECK-NEXT: struct StructPublicOnly {
// CHECK-NEXT: init()
// CHECK-NEXT: init(varPublic: Int32)
// CHECK-NEXT: var varPublic: Int32
// CHECK-NEXT: }
// CHECK-NEXT: struct StructEmptyPrivateSection {
// CHECK-NEXT: init()
// CHECK-NEXT: init(varPublic: Int32)
// CHECK-NEXT: var varPublic: Int32
// CHECK-NEXT: }
// CHECK-NEXT: struct StructPublicAndPrivate {
// CHECK-NEXT: init()
// CHECK-NEXT: var varPublic: Int32
// CHECK-NEXT: }
// CHECK-NEXT: struct StructWithUnimportedMemberFunction {
// CHECK-NEXT: init()
// CHECK-NEXT: init(varPublic: Int32)
// CHECK-NEXT: var varPublic: Int32
// CHECK-NEXT: }
// CHECK-NEXT: struct ClassPrivateOnly {
// CHECK-NEXT: init()
// CHECK-NEXT: }
// CHECK-NEXT: struct ClassPublicOnly {
// CHECK-NEXT: init()
// CHECK-NEXT: init(varPublic: Int32)
// CHECK-NEXT: var varPublic: Int32
// CHECK-NEXT: }
// CHECK-NEXT: struct ClassEmptyPublicSection {
// CHECK-NEXT: init()
// CHECK-NEXT: }
// CHECK-NEXT: struct ClassPrivateAndPublic {
// CHECK-NEXT: init()
// CHECK-NEXT: var varPublic: Int32
// CHECK-NEXT: }
// CHECK-NEXT: struct ClassWithUnimportedMemberFunction {
// CHECK-NEXT: init()
// CHECK-NEXT: init(varPublic: Int32)
// CHECK-NEXT: var varPublic: Int32
// CHECK-NEXT: }
// CHECK-NEXT: struct ClassWithTemplatedFunction {
// CHECK-NEXT: init()
// CHECK-NEXT: init(varPublic: Int32)
// CHECK-NEXT: var varPublic: Int32
// CHECK-NEXT: }
// CHECK-NEXT: struct ClassWithTemplatedUsingDecl {
// CHECK-NEXT: init()
// CHECK-NEXT: init(varPublic: Int32)
// CHECK-NEXT: var varPublic: Int32
// CHECK-NEXT: }