diff --git a/include/swift/Basic/Features.def b/include/swift/Basic/Features.def index d389934aadda6..ba0df081795c1 100644 --- a/include/swift/Basic/Features.def +++ b/include/swift/Basic/Features.def @@ -185,7 +185,6 @@ BASELINE_LANGUAGE_FEATURE(RetroactiveAttribute, 364, "@retroactive") BASELINE_LANGUAGE_FEATURE(ExtensionMacroAttr, 0, "@attached(extension)") BASELINE_LANGUAGE_FEATURE(TypedThrows, 413, "Typed throws") BASELINE_LANGUAGE_FEATURE(OptionalIsolatedParameters, 420, "Optional isolated parameters") -BASELINE_LANGUAGE_FEATURE(Extern, 0, "@_extern") BASELINE_LANGUAGE_FEATURE(ExpressionMacroDefaultArguments, 422, "Expression macro as caller-side default argument") BASELINE_LANGUAGE_FEATURE(BuiltinStoreRaw, 0, "Builtin.storeRaw") BASELINE_LANGUAGE_FEATURE(BuiltinCreateTask, 0, "Builtin.createTask and Builtin.createDiscardingTask") @@ -395,6 +394,8 @@ EXPERIMENTAL_FEATURE(ReinitializeConsumeInMultiBlockDefer, false) EXPERIMENTAL_FEATURE(SE427NoInferenceOnExtension, false) +EXPERIMENTAL_FEATURE(Extern, true) + #undef EXPERIMENTAL_FEATURE_EXCLUDED_FROM_MODULE_INTERFACE #undef EXPERIMENTAL_FEATURE #undef UPCOMING_FEATURE diff --git a/lib/AST/FeatureSet.cpp b/lib/AST/FeatureSet.cpp index 0241d973d8aec..bb14f1c93a5a0 100644 --- a/lib/AST/FeatureSet.cpp +++ b/lib/AST/FeatureSet.cpp @@ -188,6 +188,7 @@ static bool usesFeatureSendingArgsAndResults(Decl *decl) { UNINTERESTING_FEATURE(DynamicActorIsolation) UNINTERESTING_FEATURE(NonfrozenEnumExhaustivity) UNINTERESTING_FEATURE(ClosureIsolation) +UNINTERESTING_FEATURE(Extern) static bool usesFeatureBitwiseCopyable2(Decl *decl) { if (!decl->getModuleContext()->isStdlibModule()) { diff --git a/lib/Sema/TypeCheckAttr.cpp b/lib/Sema/TypeCheckAttr.cpp index b347c2baaf889..2d56edd1819b1 100644 --- a/lib/Sema/TypeCheckAttr.cpp +++ b/lib/Sema/TypeCheckAttr.cpp @@ -2333,7 +2333,8 @@ static bool isCCompatibleFuncDecl(FuncDecl *FD) { } void AttributeChecker::visitExternAttr(ExternAttr *attr) { - if (!Ctx.LangOpts.hasFeature(Feature::Extern)) { + if (!Ctx.LangOpts.hasFeature(Feature::Extern) + && !D->getModuleContext()->isStdlibModule()) { diagnoseAndRemoveAttr(attr, diag::attr_extern_experimental); return; } diff --git a/test/SIL/modules-extern.swift b/test/SIL/modules-extern.swift index 6d03015ea1057..022c3655b9312 100644 --- a/test/SIL/modules-extern.swift +++ b/test/SIL/modules-extern.swift @@ -1,8 +1,8 @@ // RUN: %empty-directory(%t) // RUN: %{python} %utils/split_file.py -o %t %s -// RUN: %target-swift-frontend -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -parse-as-library -// RUN: %target-swift-frontend -c -I %t %t/Main.swift -o %t/a.o +// RUN: %target-swift-frontend -enable-experimental-feature Extern -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -parse-as-library +// RUN: %target-swift-frontend -enable-experimental-feature Extern -c -I %t %t/Main.swift -o %t/a.o // BEGIN MyModule.swift diff --git a/test/embedded/array-to-pointer.swift b/test/embedded/array-to-pointer.swift index bc6d1eacce77e..4448be0342cdf 100644 --- a/test/embedded/array-to-pointer.swift +++ b/test/embedded/array-to-pointer.swift @@ -1,5 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend %s -enable-experimental-feature Embedded -c -o %t/main.o +// RUN: %target-swift-frontend %s -enable-experimental-feature Extern -enable-experimental-feature Embedded -c -o %t/main.o // RUN: %target-clang -x c -c %S/Inputs/print.c -o %t/print.o // RUN: %target-clang %t/main.o %t/print.o -o %t/a.out -dead_strip // RUN: %target-run %t/a.out | %FileCheck %s diff --git a/test/embedded/arrays.swift b/test/embedded/arrays.swift index 39b329b35ceb8..ef8abb4b52d38 100644 --- a/test/embedded/arrays.swift +++ b/test/embedded/arrays.swift @@ -1,5 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend %s -enable-experimental-feature Embedded -c -o %t/main.o +// RUN: %target-swift-frontend -enable-experimental-feature Extern %s -enable-experimental-feature Embedded -c -o %t/main.o // RUN: %target-clang -x c -c %S/Inputs/print.c -o %t/print.o // RUN: %target-clang %t/main.o %t/print.o -o %t/a.out -dead_strip // RUN: %target-run %t/a.out | %FileCheck %s diff --git a/test/embedded/collection.swift b/test/embedded/collection.swift index 25c904a064c0e..1701ed0ce12d8 100644 --- a/test/embedded/collection.swift +++ b/test/embedded/collection.swift @@ -1,5 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend -enable-experimental-feature Embedded -enforce-exclusivity=none %s -c -o %t/a.o +// RUN: %target-swift-frontend -enable-experimental-feature Extern -enable-experimental-feature Embedded -enforce-exclusivity=none %s -c -o %t/a.o // RUN: %target-clang -x c -c %S/Inputs/print.c -o %t/print.o // RUN: %target-clang %t/a.o %t/print.o -o %t/a.out // RUN: %target-run %t/a.out | %FileCheck %s diff --git a/test/embedded/custom-print.swift b/test/embedded/custom-print.swift index b7d42ad838660..52eee837e0f98 100644 --- a/test/embedded/custom-print.swift +++ b/test/embedded/custom-print.swift @@ -1,5 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend -enable-experimental-feature Embedded -enforce-exclusivity=none %s -c -o %t/a.o +// RUN: %target-swift-frontend -enable-experimental-feature Extern -enable-experimental-feature Embedded -enforce-exclusivity=none %s -c -o %t/a.o // RUN: %target-clang %t/a.o -o %t/a.out // RUN: %target-run %t/a.out | %FileCheck %s diff --git a/test/embedded/dependencies-no-allocations.swift b/test/embedded/dependencies-no-allocations.swift index fd01ef2afba38..1ad28c2a32906 100644 --- a/test/embedded/dependencies-no-allocations.swift +++ b/test/embedded/dependencies-no-allocations.swift @@ -1,5 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend -enable-experimental-feature Embedded -no-allocations %s -c -o %t/a.o +// RUN: %target-swift-frontend -enable-experimental-feature Extern -enable-experimental-feature Embedded -no-allocations %s -c -o %t/a.o // RUN: grep DEP\: %s | sed 's#// DEP\: ##' | sort > %t/allowed-dependencies.txt diff --git a/test/embedded/dependencies.swift b/test/embedded/dependencies.swift index 4e4147aadad3d..f51eb459dde3b 100644 --- a/test/embedded/dependencies.swift +++ b/test/embedded/dependencies.swift @@ -1,5 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend -parse-as-library -enable-experimental-feature Embedded %s -c -o %t/a.o +// RUN: %target-swift-frontend -parse-as-library -enable-experimental-feature Extern -enable-experimental-feature Embedded %s -c -o %t/a.o // RUN: grep DEP\: %s | sed 's#// DEP\: ##' | sort > %t/allowed-dependencies.txt diff --git a/test/embedded/deserialize-vtables.swift b/test/embedded/deserialize-vtables.swift index d2606d9014aff..9e1fa1832505c 100644 --- a/test/embedded/deserialize-vtables.swift +++ b/test/embedded/deserialize-vtables.swift @@ -1,6 +1,6 @@ -// RUN: %target-run-simple-swift(-enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s -// RUN: %target-run-simple-swift(-O -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s -// RUN: %target-run-simple-swift(-Osize -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s +// RUN: %target-run-simple-swift(-enable-experimental-feature Extern -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s +// RUN: %target-run-simple-swift(-O -enable-experimental-feature Extern -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s +// RUN: %target-run-simple-swift(-Osize -enable-experimental-feature Extern -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s // REQUIRES: swift_in_compiler // REQUIRES: executable_test diff --git a/test/embedded/lto.swift b/test/embedded/lto.swift index 7e450703b1229..6c3ccc246eaeb 100644 --- a/test/embedded/lto.swift +++ b/test/embedded/lto.swift @@ -1,5 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend -lto=llvm-full %s -enable-experimental-feature Embedded -emit-bc -o %t/a.o +// RUN: %target-swift-frontend -enable-experimental-feature Extern -lto=llvm-full %s -enable-experimental-feature Embedded -emit-bc -o %t/a.o // RUN: %target-clang %t/a.o -o %t/a.out // RUN: %target-run %t/a.out | %FileCheck %s diff --git a/test/embedded/modules-extern.swift b/test/embedded/modules-extern.swift index e0bc3fe149820..2ab9dab09c035 100644 --- a/test/embedded/modules-extern.swift +++ b/test/embedded/modules-extern.swift @@ -1,8 +1,8 @@ // RUN: %empty-directory(%t) // RUN: %{python} %utils/split_file.py -o %t %s -// RUN: %target-swift-frontend -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -enable-experimental-feature Embedded -parse-as-library -// RUN: %target-swift-frontend -c -I %t %t/Main.swift -enable-experimental-feature Embedded -o %t/a.o +// RUN: %target-swift-frontend -enable-experimental-feature Extern -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -enable-experimental-feature Embedded -parse-as-library +// RUN: %target-swift-frontend -enable-experimental-feature Extern -c -I %t %t/Main.swift -enable-experimental-feature Embedded -o %t/a.o // REQUIRES: swift_in_compiler // REQUIRES: OS=macosx || OS=linux-gnu diff --git a/test/embedded/modules-globals-exec.swift b/test/embedded/modules-globals-exec.swift index 3381d33ea31b8..9dbe7961d59a2 100644 --- a/test/embedded/modules-globals-exec.swift +++ b/test/embedded/modules-globals-exec.swift @@ -1,8 +1,8 @@ // RUN: %empty-directory(%t) // RUN: %{python} %utils/split_file.py -o %t %s -// RUN: %target-swift-frontend -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -enable-experimental-feature Embedded -parse-as-library -// RUN: %target-swift-frontend -c -I %t %t/Main.swift -enable-experimental-feature Embedded -o %t/a.o +// RUN: %target-swift-frontend -enable-experimental-feature Extern -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -enable-experimental-feature Embedded -parse-as-library +// RUN: %target-swift-frontend -enable-experimental-feature Extern -c -I %t %t/Main.swift -enable-experimental-feature Embedded -o %t/a.o // RUN: %target-clang -x c -c %S/Inputs/print.c -o %t/print.o // RUN: %target-clang %t/a.o %t/print.o -o %t/a.out // RUN: %target-run %t/a.out | %FileCheck %s diff --git a/test/embedded/modules-print-exec.swift b/test/embedded/modules-print-exec.swift index 33ad824bbd9af..72ec5043717a1 100644 --- a/test/embedded/modules-print-exec.swift +++ b/test/embedded/modules-print-exec.swift @@ -1,8 +1,8 @@ // RUN: %empty-directory(%t) // RUN: %{python} %utils/split_file.py -o %t %s -// RUN: %target-swift-frontend -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -enable-experimental-feature Embedded -parse-as-library -// RUN: %target-swift-frontend -c -I %t %t/Main.swift -enable-experimental-feature Embedded -o %t/a.o +// RUN: %target-swift-frontend -enable-experimental-feature Extern -emit-module -o %t/MyModule.swiftmodule %t/MyModule.swift -enable-experimental-feature Embedded -parse-as-library +// RUN: %target-swift-frontend -enable-experimental-feature Extern -c -I %t %t/Main.swift -enable-experimental-feature Embedded -o %t/a.o // RUN: %target-clang -x c -c %S/Inputs/print.c -o %t/print.o // RUN: %target-clang %t/a.o %t/print.o -o %t/a.out // RUN: %target-run %t/a.out | %FileCheck %s diff --git a/test/embedded/runtime.swift b/test/embedded/runtime.swift index d887dc1ca30b3..bba83252cdc4c 100644 --- a/test/embedded/runtime.swift +++ b/test/embedded/runtime.swift @@ -1,6 +1,6 @@ -// RUN: %target-run-simple-swift(-enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s -// RUN: %target-run-simple-swift(-O -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s -// RUN: %target-run-simple-swift(-Osize -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s +// RUN: %target-run-simple-swift(-enable-experimental-feature Extern -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s +// RUN: %target-run-simple-swift(-enable-experimental-feature Extern -O -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s +// RUN: %target-run-simple-swift(-enable-experimental-feature Extern -Osize -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s // REQUIRES: swift_in_compiler // REQUIRES: executable_test diff --git a/test/embedded/string-to-pointer.swift b/test/embedded/string-to-pointer.swift index b5bec289b92ad..3733a80902d3c 100644 --- a/test/embedded/string-to-pointer.swift +++ b/test/embedded/string-to-pointer.swift @@ -1,4 +1,4 @@ -// RUN: %target-run-simple-swift(-enable-experimental-feature Embedded -wmo) | %FileCheck %s +// RUN: %target-run-simple-swift(-enable-experimental-feature Extern -enable-experimental-feature Embedded -wmo) | %FileCheck %s // REQUIRES: swift_in_compiler // REQUIRES: executable_test diff --git a/test/embedded/traps-multiple-preconditions-ir.swift b/test/embedded/traps-multiple-preconditions-ir.swift index 6265fe8e4004a..31f9306835748 100644 --- a/test/embedded/traps-multiple-preconditions-ir.swift +++ b/test/embedded/traps-multiple-preconditions-ir.swift @@ -1,7 +1,7 @@ -// RUN: %target-swift-emit-ir -enable-experimental-feature Embedded -wmo -Xllvm -link-embedded-runtime=0 %s -O | %FileCheck %s --check-prefix=CHECK-NOMESSAGE -// RUN: %target-swift-emit-ir -enable-experimental-feature Embedded -wmo -Xllvm -link-embedded-runtime=0 %s -Osize | %FileCheck %s --check-prefix=CHECK-NOMESSAGE -// RUN: %target-swift-emit-ir -enable-experimental-feature Embedded -wmo -Xllvm -link-embedded-runtime=0 %s -O -assert-config Debug | %FileCheck %s --check-prefix=CHECK-MESSAGE -// RUN: %target-swift-emit-ir -enable-experimental-feature Embedded -wmo -Xllvm -link-embedded-runtime=0 %s -Osize -assert-config Debug | %FileCheck %s --check-prefix=CHECK-MESSAGE +// RUN: %target-swift-emit-ir -enable-experimental-feature Extern -enable-experimental-feature Embedded -wmo -Xllvm -link-embedded-runtime=0 %s -O | %FileCheck %s --check-prefix=CHECK-NOMESSAGE +// RUN: %target-swift-emit-ir -enable-experimental-feature Extern -enable-experimental-feature Embedded -wmo -Xllvm -link-embedded-runtime=0 %s -Osize | %FileCheck %s --check-prefix=CHECK-NOMESSAGE +// RUN: %target-swift-emit-ir -enable-experimental-feature Extern -enable-experimental-feature Embedded -wmo -Xllvm -link-embedded-runtime=0 %s -O -assert-config Debug | %FileCheck %s --check-prefix=CHECK-MESSAGE +// RUN: %target-swift-emit-ir -enable-experimental-feature Extern -enable-experimental-feature Embedded -wmo -Xllvm -link-embedded-runtime=0 %s -Osize -assert-config Debug | %FileCheck %s --check-prefix=CHECK-MESSAGE // REQUIRES: swift_in_compiler // REQUIRES: optimized_stdlib diff --git a/test/embedded/volatile-exec.swift b/test/embedded/volatile-exec.swift index 1aee5661dc903..e4d71bf965e25 100644 --- a/test/embedded/volatile-exec.swift +++ b/test/embedded/volatile-exec.swift @@ -1,4 +1,4 @@ -// RUN: %target-run-simple-swift(-parse-as-library -enable-experimental-feature Embedded -wmo -runtime-compatibility-version none) | %FileCheck %s +// RUN: %target-run-simple-swift(-parse-as-library -enable-experimental-feature Extern -enable-experimental-feature Embedded -wmo -runtime-compatibility-version none) | %FileCheck %s // REQUIRES: swift_in_compiler // REQUIRES: executable_test