Skip to content

Commit 8f58eaf

Browse files
committed
[cxx-interop] Make sure interop does not trigger TBD validation errors
This disables TBD validation when C++ interop is enabled, unless an explicit `-validate-tbd-against-ir=` flag was passed. rdar://83405989 / #56458
1 parent 4f2ab59 commit 8f58eaf

11 files changed

+22
-17
lines changed

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,8 +397,9 @@ void ArgsToFrontendOptionsConverter::computeDebugTimeOptions() {
397397

398398
void ArgsToFrontendOptionsConverter::computeTBDOptions() {
399399
using namespace options;
400+
using Mode = FrontendOptions::TBDValidationMode;
401+
400402
if (const Arg *A = Args.getLastArg(OPT_validate_tbd_against_ir_EQ)) {
401-
using Mode = FrontendOptions::TBDValidationMode;
402403
StringRef value = A->getValue();
403404
if (value == "none") {
404405
Opts.ValidateTBDAgainstIR = Mode::None;
@@ -410,6 +411,16 @@ void ArgsToFrontendOptionsConverter::computeTBDOptions() {
410411
Diags.diagnose(SourceLoc(), diag::error_unsupported_option_argument,
411412
A->getOption().getPrefixedName(), value);
412413
}
414+
} else if (Args.hasArg(OPT_enable_experimental_cxx_interop) ||
415+
Args.hasArg(OPT_cxx_interoperability_mode)) {
416+
// TBD validation currently emits diagnostics when C++ interop is enabled,
417+
// which is likely caused by IRGen incorrectly applying attributes to
418+
// symbols, forcing the user to pass `-validate-tbd-against-ir=none`.
419+
// If no explicit TBD validation mode was specified, disable it if C++
420+
// interop is enabled.
421+
// See https://github.com/apple/swift/issues/56458.
422+
// FIXME: the TBD validation diagnostics are correct and should be enabled.
423+
Opts.ValidateTBDAgainstIR = Mode::None;
413424
}
414425
}
415426

test/Interop/Cxx/class/inline-function-codegen/static-var-init-calls-function-execution.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none)
1+
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop)
22
//
33
// REQUIRES: executable_test
44

5-
// TODO: See why -validate-tbd-against-ir=none is needed here
6-
// (https://github.com/apple/swift/issues/56458).
7-
85
import StaticVarInitCallsFunction
96
import StdlibUnittest
107

test/Interop/Cxx/class/inline-function-codegen/static-var-init-calls-function-irgen.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
// RUN: %target-swift-emit-ir %s -I %S/Inputs -enable-experimental-cxx-interop -validate-tbd-against-ir=none | %FileCheck %s
2-
3-
// TODO: See why -validate-tbd-against-ir=none is needed here
4-
// (https://github.com/apple/swift/issues/56458).
1+
// RUN: %target-swift-emit-ir %s -I %S/Inputs -enable-experimental-cxx-interop | %FileCheck %s
52

63
import StaticVarInitCallsFunction
74

test/Interop/Cxx/stdlib/overlay/custom-convertible-to-collection.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none)
1+
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop)
22
//
33
// REQUIRES: executable_test
44
// REQUIRES: OS=macosx || OS=linux-gnu

test/Interop/Cxx/stdlib/overlay/std-string-overlay.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none)
1+
// RUN: %target-run-simple-swift(-Xfrontend -enable-experimental-cxx-interop)
22
//
33
// REQUIRES: executable_test
44
// REQUIRES: OS=macosx || OS=linux-gnu

test/Interop/Cxx/stdlib/use-std-map.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none)
1+
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop)
22
//
33
// REQUIRES: executable_test
44
//

test/Interop/Cxx/stdlib/use-std-optional.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop -Xcc -std=c++17 -Xfrontend -validate-tbd-against-ir=none)
1+
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop -Xcc -std=c++17)
22
//
33
// REQUIRES: executable_test
44
// REQUIRES: OS=macosx || OS=linux-gnu

test/Interop/Cxx/stdlib/use-std-pair.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none)
1+
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop)
22
//
33
// REQUIRES: executable_test
44
//

test/Interop/Cxx/stdlib/use-std-set.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none)
1+
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop)
22
//
33
// REQUIRES: executable_test
44
//

test/Interop/Cxx/stdlib/use-std-string.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none)
1+
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop)
22
//
33
// REQUIRES: executable_test
44

test/Interop/Cxx/stdlib/use-std-vector.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none)
1+
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop)
22
//
33
// REQUIRES: executable_test
44
//

0 commit comments

Comments
 (0)