mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Warn about the use of internal bridging headers without library evolution
It's very, very easy to make a mistake that will cause broken serialized modules. Until that's no longer true, at least tell folks that they are heading into uncharted waters, as we do with `@_implementationOnly` imports.
This commit is contained in:
@@ -609,6 +609,9 @@ ERROR(no_swift_sources_with_embedded,none,
|
|||||||
ERROR(package_cmo_requires_library_evolution, none,
|
ERROR(package_cmo_requires_library_evolution, none,
|
||||||
"Library evolution must be enabled for Package CMO", ())
|
"Library evolution must be enabled for Package CMO", ())
|
||||||
|
|
||||||
|
WARNING(internal_bridging_header_without_library_evolution,none,
|
||||||
|
"using internal bridging headers without library evolution can cause instability", ())
|
||||||
|
|
||||||
ERROR(experimental_not_supported_in_production,none,
|
ERROR(experimental_not_supported_in_production,none,
|
||||||
"experimental feature '%0' cannot be enabled in production compiler",
|
"experimental feature '%0' cannot be enabled in production compiler",
|
||||||
(StringRef))
|
(StringRef))
|
||||||
|
|||||||
@@ -2129,6 +2129,13 @@ static bool ParseClangImporterArgs(ClangImporterOptions &Opts, ArgList &Args,
|
|||||||
Opts.BridgingHeaderIsInternal = importAsInternal;
|
Opts.BridgingHeaderIsInternal = importAsInternal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Until we have some checking in place, internal bridging headers are a
|
||||||
|
// bit unsafe without library evolution.
|
||||||
|
if (Opts.BridgingHeaderIsInternal && !FrontendOpts.EnableLibraryEvolution) {
|
||||||
|
Diags.diagnose(SourceLoc(),
|
||||||
|
diag::internal_bridging_header_without_library_evolution);
|
||||||
|
}
|
||||||
|
|
||||||
Opts.DisableSwiftBridgeAttr |= Args.hasArg(OPT_disable_swift_bridge_attr);
|
Opts.DisableSwiftBridgeAttr |= Args.hasArg(OPT_disable_swift_bridge_attr);
|
||||||
|
|
||||||
Opts.DisableOverlayModules |= Args.hasArg(OPT_emit_imported_modules);
|
Opts.DisableOverlayModules |= Args.hasArg(OPT_emit_imported_modules);
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -internal-import-bridging-header %S/../Inputs/c-bridging-header.h -sdk %clang-importer-sdk %s 2>&1 | %FileCheck -check-prefix NONRESILIENT %s
|
||||||
|
|
||||||
|
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -internal-import-bridging-header %S/../Inputs/c-bridging-header.h -sdk %clang-importer-sdk %s -enable-library-evolution 2>&1 | %FileCheck -check-prefix EVOLUTION %s
|
||||||
|
|
||||||
|
// NONRESILIENT: warning: using internal bridging headers without library evolution can cause instability
|
||||||
|
|
||||||
|
// EVOLUTION-NOT: internal bridging head
|
||||||
|
|
||||||
|
@available(*, deprecated)
|
||||||
|
func f() { }
|
||||||
|
|
||||||
|
func g(){
|
||||||
|
f() // make sure we emit something
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user