Skip to content

Commit 0c35771

Browse files
committed
[cxx-interop] Emit -enable-experimental-cxx-interop flag into the module interface
This makes sure that when Swift is generating a `.swiftinterface` file for a Swift module with a dependency on C++ module, `-enable-experimental-cxx-interop` is emitted under `// swift-module-flags:`. The module interface might refer to C++ symbols which are not available in Swift without C++ interop enabled. This caused a build error for Swift LLVM bindings during `verify-module-interface` stage: Swift tried to import the module interface and couldn't find C++ stdlib headers because C++ interop was disabled.
1 parent fb1859d commit 0c35771

File tree

5 files changed

+13
-4
lines changed

5 files changed

+13
-4
lines changed

include/swift/Option/Options.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ def enable_experimental_concise_pound_file : Flag<["-"],
614614

615615
def enable_experimental_cxx_interop :
616616
Flag<["-"], "enable-experimental-cxx-interop">,
617-
Flags<[FrontendOption, HelpHidden]>,
617+
Flags<[FrontendOption, HelpHidden, ModuleInterfaceOption]>,
618618
HelpText<"Enable experimental C++ interop code generation and config directives">;
619619

620620
def experimental_cxx_stdlib :
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module Namespace {
1+
module Namespaces {
22
header "namespace.h"
33
requires cplusplus
44
}

test/Interop/Cxx/modules/Inputs/namespace-extension-lib.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Namespace
1+
import Namespaces
22

33
extension Namespace.Parent {
44
public static func test() -> Int { 42 }
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-emit-module-interface(%t/UsesCxxStruct.swiftinterface) %s -I %S/Inputs -enable-library-evolution -swift-version 5 -enable-experimental-cxx-interop %S/Inputs/namespace-extension-lib.swift
3+
// RUN: %target-swift-typecheck-module-from-interface(%t/UsesCxxStruct.swiftinterface) -I %S/Inputs
4+
// RUN: %FileCheck --input-file=%t/UsesCxxStruct.swiftinterface %s
5+
// CHECK: -enable-experimental-cxx-interop
6+
7+
import Namespaces
8+
9+
var x: Namespace.Parent? = nil

test/Interop/Cxx/modules/use-namespace-extension-lib.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// XFAIL: OS=windows-msvc
1010

1111
import StdlibUnittest
12-
import Namespace
12+
import Namespaces
1313
import NamespaceExtensionLib
1414

1515
var NamespacesTestSuite = TestSuite("Extension in library on namespace")

0 commit comments

Comments
 (0)