Files
swift-mirror/test/Interop/SwiftToCxx/initializers/init-in-extension-in-cxx.swift
Egor Zhdan cfbdd76493 [cxx-interop] Avoid ambiguous C++ overloads for functions from Swift extensions
Reverse interop has logic that avoids emitting ambiguous overloads into the generated header. That logic did not apply for functions declared within Swift extensions. This meant that the generated C++ header would sometimes not compile.

rdar://158252800
2025-08-19 15:27:26 +01:00

23 lines
755 B
Swift

// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend %s -module-name Init -clang-header-expose-decls=all-public -typecheck -verify -emit-clang-header-path %t/inits.h
// RUN: %FileCheck %s < %t/inits.h
// RUN: %check-interop-cxx-header-in-clang(%t/inits.h -Wno-unused-function -DSWIFT_CXX_INTEROP_HIDE_STL_OVERLAY)
public struct OverloadedInitInExtension {
let x: Int
public init(_ x: Int) {
self.x = x
}
}
extension OverloadedInitInExtension {
public init(viaExtension x: Int) {
self.x = x
}
}
// Make sure we don't emit ambiguous overloads:
// CHECK: static SWIFT_INLINE_THUNK OverloadedInitInExtension init(swift::Int x)
// CHECK-NOT: static SWIFT_INLINE_THUNK OverloadedInitInExtension init(swift::Int x)