From c56cca1d3beae8d5d23256d6d3ed8e2e0d9a369b Mon Sep 17 00:00:00 2001 From: Gabor Horvath Date: Thu, 4 Jul 2024 11:29:29 +0100 Subject: [PATCH] [cxx-interop] Do not expose enums with optional generic cases Unfortunately, we cannot generate the C++ code for them just yet. There will be a follow-up PR to actually fix the underlying issue and expose such enums correctly. rdar://129250756 --- lib/PrintAsClang/DeclAndTypePrinter.cpp | 3 +++ test/Interop/SwiftToCxx/generics/generic-enum-in-cxx.swift | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/lib/PrintAsClang/DeclAndTypePrinter.cpp b/lib/PrintAsClang/DeclAndTypePrinter.cpp index eee6d860e98cf..1261e5af1dedd 100644 --- a/lib/PrintAsClang/DeclAndTypePrinter.cpp +++ b/lib/PrintAsClang/DeclAndTypePrinter.cpp @@ -2914,6 +2914,9 @@ static bool isEnumExposableToCxx(const ValueDecl *VD, if (auto *params = elementDecl->getParameterList()) { for (const auto *param : *params) { auto paramType = param->getInterfaceType(); + // TODO: properly support exporting these optionals. rdar://131112273 + if (paramType->isOptional() && paramType->getOptionalObjectType()->isTypeParameter()) + return false; if (DeclAndTypeClangFunctionPrinter::getTypeRepresentation( printer.getTypeMapping(), printer.getInteropContext(), printer, enumDecl->getModuleContext(), paramType) diff --git a/test/Interop/SwiftToCxx/generics/generic-enum-in-cxx.swift b/test/Interop/SwiftToCxx/generics/generic-enum-in-cxx.swift index ca06074d20df2..a4747a926dcac 100644 --- a/test/Interop/SwiftToCxx/generics/generic-enum-in-cxx.swift +++ b/test/Interop/SwiftToCxx/generics/generic-enum-in-cxx.swift @@ -89,6 +89,11 @@ public func inoutConcreteOpt(_ x: inout GenericOpt) { } } +@frozen public enum GenericCustomType { + case success(T?) + case failure +} + // CHECK: namespace Generics SWIFT_PRIVATE_ATTR SWIFT_SYMBOL_MODULE("Generics") { // CHECK: template