Skip to content

Commit f3e8b8f

Browse files
authored
---
yaml --- r: 340441 b: refs/heads/rxwei-patch-1 c: 967313a h: refs/heads/master i: 340439: 4748684
1 parent a8c3baf commit f3e8b8f

39 files changed

+456
-357
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1015,7 +1015,7 @@ refs/tags/swift-DEVELOPMENT-SNAPSHOT-2018-08-18-a: b10b1fce14385faa6d44f6b933e95
10151015
refs/heads/rdar-43033749-fix-batch-mode-no-diags-swift-5.0-branch: a14e64eaad30de89f0f5f0b2a782eed7ecdcb255
10161016
refs/heads/revert-19006-error-bridging-integer-type: 8a9065a3696535305ea53fe9b71f91cbe6702019
10171017
refs/heads/revert-19050-revert-19006-error-bridging-integer-type: ecf752d54b05dd0a20f510f0bfa54a3fec3bcaca
1018-
refs/heads/rxwei-patch-1: 2e9c904e163bfac7a1db526d1eee358488344842
1018+
refs/heads/rxwei-patch-1: 967313a0a0ac053c3c60deaf33e86ef9b8fd3279
10191019
refs/heads/shahmishal-patch-1: e58ec0f7488258d42bef51bc3e6d7b3dc74d7b2a
10201020
refs/heads/typelist-existential: 4046359efd541fb5c72d69a92eefc0a784df8f5e
10211021
refs/tags/swift-4.2-DEVELOPMENT-SNAPSHOT-2018-08-20-a: 4319ba09e4fb8650ee86061075c74a016b6baab9

branches/rxwei-patch-1/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ Instructions for installing CMake and Ninja directly can be found [below](#build
9898

9999
For Ubuntu, you'll need the following development dependencies:
100100

101-
sudo apt-get install git cmake ninja-build clang python uuid-dev libicu-dev icu-devtools libbsd-dev libedit-dev libxml2-dev libsqlite3-dev swig libpython-dev libncurses5-dev pkg-config libblocksruntime-dev libcurl4-openssl-dev systemtap-sdt-dev tzdata rsync
101+
sudo apt-get install git cmake ninja-build clang python uuid-dev libicu-dev icu-devtools libedit-dev libxml2-dev libsqlite3-dev swig libpython-dev libncurses5-dev pkg-config libblocksruntime-dev libcurl4-openssl-dev systemtap-sdt-dev tzdata rsync
102102

103103
**Note:** LLDB currently requires at least `swig-1.3.40` but will successfully build
104104
with version 2 shipped with Ubuntu.

branches/rxwei-patch-1/include/swift/AST/Attr.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ SIMPLE_DECL_ATTR(_implementationOnly, ImplementationOnly,
401401
DECL_ATTR(_custom, Custom,
402402
OnAnyDecl | UserInaccessible,
403403
85)
404-
SIMPLE_DECL_ATTR(_propertyWrapper, PropertyWrapper,
404+
SIMPLE_DECL_ATTR(propertyWrapper, PropertyWrapper,
405405
OnStruct | OnClass | OnEnum,
406406
86)
407407
SIMPLE_DECL_ATTR(_disfavoredOverload, DisfavoredOverload,

branches/rxwei-patch-1/include/swift/AST/Decl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5150,6 +5150,10 @@ class VarDecl : public AbstractStorageDecl {
51505150
/// \end
51515151
bool isPropertyWrapperInitializedWithInitialValue() const;
51525152

5153+
/// Whether the memberwise initializer parameter for a property with a property wrapper type
5154+
/// uses the wrapped type.
5155+
bool isPropertyMemberwiseInitializedWithWrappedType() const;
5156+
51535157
/// If this property is the backing storage for a property with an attached
51545158
/// property wrapper, return the original property.
51555159
///

branches/rxwei-patch-1/include/swift/AST/DiagnosticsSema.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4462,6 +4462,9 @@ ERROR(property_wrapper_type_not_usable_from_inline,none,
44624462
"%select{%select{variable|constant}0|property}1 "
44634463
"must be '@usableFromInline' or public",
44644464
(bool, bool))
4465+
WARNING(property_wrapper_delegateValue,none,
4466+
"property wrapper's `delegateValue` property should be renamed to "
4467+
"'wrapperValue'; use of 'delegateValue' is deprecated", ())
44654468

44664469
//------------------------------------------------------------------------------
44674470
// MARK: function builder diagnostics

branches/rxwei-patch-1/lib/AST/Decl.cpp

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5473,10 +5473,6 @@ VarDecl *VarDecl::getPropertyWrapperBackingProperty() const {
54735473
}
54745474

54755475
bool VarDecl::isPropertyWrapperInitializedWithInitialValue() const {
5476-
auto &ctx = getASTContext();
5477-
if (!ctx.getLazyResolver())
5478-
return false;
5479-
54805476
auto customAttr = getAttachedPropertyWrapper();
54815477
if (!customAttr)
54825478
return false;
@@ -5495,9 +5491,33 @@ bool VarDecl::isPropertyWrapperInitializedWithInitialValue() const {
54955491
if (customAttr->getArg() != nullptr)
54965492
return false;
54975493

5498-
// If the property wrapper is default-initializable, it's the wrapper
5499-
// being initialized.
5500-
if (PBD->isDefaultInitializable(0))
5494+
// Default initialization does not use a value.
5495+
auto wrapperTypeInfo = getAttachedPropertyWrapperTypeInfo();
5496+
if (wrapperTypeInfo.defaultInit)
5497+
return false;
5498+
5499+
// There is no initializer, so the initialization form depends on
5500+
// whether the property wrapper type has an init(initialValue:).
5501+
return wrapperTypeInfo.initialValueInit != nullptr;
5502+
}
5503+
5504+
bool VarDecl::isPropertyMemberwiseInitializedWithWrappedType() const {
5505+
auto customAttr = getAttachedPropertyWrapper();
5506+
if (!customAttr)
5507+
return false;
5508+
5509+
auto *PBD = getParentPatternBinding();
5510+
if (!PBD)
5511+
return false;
5512+
5513+
// If there was an initializer on the original property, initialize
5514+
// via the initial value.
5515+
if (PBD->getPatternList()[0].getEqualLoc().isValid())
5516+
return true;
5517+
5518+
// If there was an initializer on the attribute itself, initialize
5519+
// via the full wrapper.
5520+
if (customAttr->getArg() != nullptr)
55015521
return false;
55025522

55035523
// There is no initializer, so the initialization form depends on

branches/rxwei-patch-1/lib/Parse/ParseDecl.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1800,6 +1800,12 @@ ParserStatus Parser::parseDeclAttribute(DeclAttributes &Attributes, SourceLoc At
18001800
checkInvalidAttrName("_inlineable", "inlinable", DAK_Inlinable);
18011801
}
18021802

1803+
// Other names of property wrappers...
1804+
checkInvalidAttrName("propertyDelegate", "propertyWrapper",
1805+
DAK_PropertyWrapper, diag::attr_renamed_warning);
1806+
checkInvalidAttrName("_propertyWrapper", "propertyWrapper",
1807+
DAK_PropertyWrapper, diag::attr_renamed_warning);
1808+
18031809
if (DK == DAK_Count && Tok.getText() == "warn_unused_result") {
18041810
// The behavior created by @warn_unused_result is now the default. Emit a
18051811
// Fix-It to remove.

branches/rxwei-patch-1/lib/SILGen/SILGen.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,10 +1137,13 @@ emitStoredPropertyInitialization(PatternBindingDecl *pbd, unsigned i) {
11371137
// If this is the backing storage for a property with an attached wrapper
11381138
// that was initialized with `=`, use that expression as the initializer.
11391139
if (auto originalProperty = var->getOriginalWrappedProperty()) {
1140-
auto wrapperInfo =
1141-
originalProperty->getPropertyWrapperBackingPropertyInfo();
1142-
if (wrapperInfo.originalInitialValue)
1143-
init = wrapperInfo.originalInitialValue;
1140+
if (originalProperty
1141+
->isPropertyMemberwiseInitializedWithWrappedType()) {
1142+
auto wrapperInfo =
1143+
originalProperty->getPropertyWrapperBackingPropertyInfo();
1144+
if (wrapperInfo.originalInitialValue)
1145+
init = wrapperInfo.originalInitialValue;
1146+
}
11441147
}
11451148

11461149
SILDeclRef constant(var, SILDeclRef::Kind::StoredPropertyInitializer);

branches/rxwei-patch-1/lib/SILGen/SILGenConstructor.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ static bool maybeEmitPropertyWrapperInitFromValue(
112112
llvm::function_ref<void(Expr *)> body) {
113113
auto originalProperty = field->getOriginalWrappedProperty();
114114
if (!originalProperty ||
115-
!originalProperty->isPropertyWrapperInitializedWithInitialValue())
115+
!originalProperty->isPropertyMemberwiseInitializedWithWrappedType())
116116
return false;
117117

118118
auto wrapperInfo = originalProperty->getPropertyWrapperBackingPropertyInfo();
@@ -981,11 +981,15 @@ void SILGenFunction::emitMemberInitializers(DeclContext *dc,
981981
// property wrapper initialized with `=`, inject the value into an
982982
// instance of the wrapper.
983983
if (auto singleVar = pbd->getSingleVar()) {
984-
(void)maybeEmitPropertyWrapperInitFromValue(
985-
*this, init, singleVar, std::move(result),
986-
[&](Expr *expr) {
987-
result = emitRValue(expr);
988-
});
984+
auto originalVar = singleVar->getOriginalWrappedProperty();
985+
if (originalVar &&
986+
originalVar->isPropertyWrapperInitializedWithInitialValue()) {
987+
(void)maybeEmitPropertyWrapperInitFromValue(
988+
*this, init, singleVar, std::move(result),
989+
[&](Expr *expr) {
990+
result = emitRValue(expr);
991+
});
992+
}
989993
}
990994

991995
emitMemberInit(*this, selfDecl, entry.getPattern(), std::move(result));

branches/rxwei-patch-1/lib/Sema/CodeSynthesis.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2247,12 +2247,18 @@ static void maybeAddMemberwiseDefaultArg(ParamDecl *arg, VarDecl *var,
22472247
if (!var->getParentPattern()->getSingleVar())
22482248
return;
22492249

2250-
// If we don't have an expression initializer or silgen can't assign a default
2251-
// initializer, then we can't generate a default value. An example of where
2252-
// silgen can assign a default is var x: Int? where the default is nil.
2253-
// If the variable is lazy, go ahead and give it a default value.
2254-
if (!var->getAttrs().hasAttribute<LazyAttr>() &&
2255-
!var->getParentPatternBinding()->isDefaultInitializable())
2250+
// Determine whether this variable will be 'nil' initialized.
2251+
bool isNilInitialized =
2252+
(isa<OptionalType>(var->getValueInterfaceType().getPointer()) &&
2253+
!var->isParentInitialized()) ||
2254+
var->getAttrs().hasAttribute<LazyAttr>();
2255+
2256+
// Whether we have explicit initialization.
2257+
bool isExplicitlyInitialized = var->isParentInitialized();
2258+
2259+
// If this is neither nil-initialized nor explicitly initialized, don't add
2260+
// anything.
2261+
if (!isNilInitialized && !isExplicitlyInitialized)
22562262
return;
22572263

22582264
// We can add a default value now.
@@ -2268,13 +2274,14 @@ static void maybeAddMemberwiseDefaultArg(ParamDecl *arg, VarDecl *var,
22682274
// default arg. All lazy variables return a nil literal as well. *Note* that
22692275
// the type will always be a sugared T? because we don't default init an
22702276
// explicit Optional<T>.
2271-
if ((isa<OptionalType>(var->getValueInterfaceType().getPointer()) &&
2272-
!var->isParentInitialized()) ||
2273-
var->getAttrs().hasAttribute<LazyAttr>()) {
2277+
if (isNilInitialized) {
22742278
arg->setDefaultArgumentKind(DefaultArgumentKind::NilLiteral);
22752279
return;
22762280
}
22772281

2282+
// Explicitly initialize.
2283+
assert(isExplicitlyInitialized);
2284+
22782285
// If there's a backing storage property, the memberwise initializer
22792286
// will be in terms of that.
22802287
VarDecl *backingStorageVar = var->getPropertyWrapperBackingProperty();
@@ -2334,7 +2341,7 @@ ConstructorDecl *swift::createImplicitConstructor(TypeChecker &tc,
23342341
// accept a value of the original property type. Otherwise, the
23352342
// memberwise initializer will be in terms of the backing storage
23362343
// type.
2337-
if (!var->isPropertyWrapperInitializedWithInitialValue()) {
2344+
if (!var->isPropertyMemberwiseInitializedWithWrappedType()) {
23382345
varInterfaceType = backingPropertyType;
23392346
}
23402347
}

branches/rxwei-patch-1/lib/Sema/TypeCheckAccess.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1872,7 +1872,12 @@ class ExportabilityChecker : public DeclVisitor<ExportabilityChecker> {
18721872
}
18731873

18741874
void visitExtensionDecl(ExtensionDecl *ED) {
1875-
if (shouldSkipChecking(ED->getExtendedNominal()))
1875+
auto extendedType = ED->getExtendedNominal();
1876+
// TODO: Sometimes we have an extension that is marked valid but has no
1877+
// extended type. Assert, just in case we see it while testing, but
1878+
// don't crash. rdar://50401284
1879+
assert(extendedType && "valid extension with no extended type?");
1880+
if (!extendedType || shouldSkipChecking(extendedType))
18761881
return;
18771882

18781883
// FIXME: We should allow conforming to implementation-only protocols,

branches/rxwei-patch-1/lib/Sema/TypeCheckPropertyWrapper.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ static ConstructorDecl *findDefaultInit(ASTContext &ctx,
225225
llvm::Expected<PropertyWrapperTypeInfo>
226226
PropertyWrapperTypeInfoRequest::evaluate(
227227
Evaluator &eval, NominalTypeDecl *nominal) const {
228-
// We must have the @_propertyWrapper attribute to continue.
228+
// We must have the @propertyWrapper attribute to continue.
229229
if (!nominal->getAttrs().hasAttribute<PropertyWrapperAttr>()) {
230230
return PropertyWrapperTypeInfo();
231231
}
@@ -245,6 +245,18 @@ PropertyWrapperTypeInfoRequest::evaluate(
245245
result.wrapperValueVar =
246246
findValueProperty(ctx, nominal, ctx.Id_wrapperValue, /*allowMissing=*/true);
247247

248+
// If there was no wrapperValue property, but there is a delegateValue
249+
// property, use that and warn.
250+
if (!result.wrapperValueVar) {
251+
result.wrapperValueVar =
252+
findValueProperty(ctx, nominal, ctx.Id_delegateValue,
253+
/*allowMissing=*/true);
254+
if (result.wrapperValueVar) {
255+
result.wrapperValueVar->diagnose(diag::property_wrapper_delegateValue)
256+
.fixItReplace(result.wrapperValueVar->getNameLoc(), "wrapperValue");
257+
}
258+
}
259+
248260
return result;
249261
}
250262

@@ -259,7 +271,7 @@ AttachedPropertyWrapperRequest::evaluate(Evaluator &evaluator,
259271
auto nominal = evaluateOrDefault(
260272
ctx.evaluator, CustomAttrNominalRequest{mutableAttr, dc}, nullptr);
261273

262-
// If we didn't find a nominal type with a @_propertyWrapper attribute,
274+
// If we didn't find a nominal type with a @propertyWrapper attribute,
263275
// skip this custom attribute.
264276
if (!nominal || !nominal->getAttrs().hasAttribute<PropertyWrapperAttr>())
265277
continue;

branches/rxwei-patch-1/test/IDE/complete_decl_attribute.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class C {}
7575
// KEYWORD3-NEXT: Keyword/None: objcMembers[#Class Attribute#]; name=objcMembers{{$}}
7676
// KEYWORD3-NEXT: Keyword/None: NSApplicationMain[#Class Attribute#]; name=NSApplicationMain{{$}}
7777
// KEYWORD3-NEXT: Keyword/None: usableFromInline[#Class Attribute#]; name=usableFromInline
78-
// KEYWORD3-NEXT: Keyword/None: _propertyWrapper[#Class Attribute#]; name=_propertyWrapper
78+
// KEYWORD3-NEXT: Keyword/None: propertyWrapper[#Class Attribute#]; name=propertyWrapper
7979
// KEYWORD3-NEXT: Keyword/None: _functionBuilder[#Class Attribute#]; name=_functionBuilder
8080
// KEYWORD3-NEXT: End completions
8181

@@ -91,7 +91,7 @@ enum E {}
9191
// KEYWORD4-NEXT: Keyword/None: dynamicCallable[#Enum Attribute#]; name=dynamicCallable
9292
// KEYWORD4-NEXT: Keyword/None: dynamicMemberLookup[#Enum Attribute#]; name=dynamicMemberLookup
9393
// KEYWORD4-NEXT: Keyword/None: usableFromInline[#Enum Attribute#]; name=usableFromInline
94-
// KEYWORD4-NEXT: Keyword/None: _propertyWrapper[#Enum Attribute#]; name=_propertyWrapper
94+
// KEYWORD4-NEXT: Keyword/None: propertyWrapper[#Enum Attribute#]; name=propertyWrapper
9595
// KEYWORD4-NEXT: Keyword/None: _functionBuilder[#Enum Attribute#]; name=_functionBuilder
9696
// KEYWORD4-NEXT: End completions
9797

@@ -103,7 +103,7 @@ struct S{}
103103
// KEYWORD5-NEXT: Keyword/None: dynamicCallable[#Struct Attribute#]; name=dynamicCallable
104104
// KEYWORD5-NEXT: Keyword/None: dynamicMemberLookup[#Struct Attribute#]; name=dynamicMemberLookup
105105
// KEYWORD5-NEXT: Keyword/None: usableFromInline[#Struct Attribute#]; name=usableFromInline
106-
// KEYWORD5-NEXT: Keyword/None: _propertyWrapper[#Struct Attribute#]; name=_propertyWrapper
106+
// KEYWORD5-NEXT: Keyword/None: propertyWrapper[#Struct Attribute#]; name=propertyWrapper
107107
// KEYWORD5-NEXT: Keyword/None: _functionBuilder[#Struct Attribute#]; name=_functionBuilder
108108
// KEYWORD5-NEXT: End completions
109109

@@ -204,7 +204,7 @@ struct _S {
204204
// ON_MEMBER_LAST-DAG: Keyword/None: discardableResult[#Declaration Attribute#]; name=discardableResult
205205
// ON_MEMBER_LAST-DAG: Keyword/None: GKInspectable[#Declaration Attribute#]; name=GKInspectable
206206
// ON_MEMBER_LAST-DAG: Keyword/None: IBSegueAction[#Declaration Attribute#]; name=IBSegueAction
207-
// ON_MEMBER_LAST-DAG: Keyword/None: _propertyWrapper[#Declaration Attribute#]; name=_propertyWrapper
207+
// ON_MEMBER_LAST-DAG: Keyword/None: propertyWrapper[#Declaration Attribute#]; name=propertyWrapper
208208
// ON_MEMBER_LAST-DAG: Keyword/None: _functionBuilder[#Declaration Attribute#]; name=_functionBuilder
209209
// ON_MEMBER_LAST-NOT: Keyword
210210
// ON_MEMBER_LAST: Decl[Struct]/CurrModule: MyStruct[#MyStruct#]; name=MyStruct
@@ -236,7 +236,7 @@ struct _S {
236236
// KEYWORD_LAST-NEXT: Keyword/None: usableFromInline[#Declaration Attribute#]; name=usableFromInline{{$}}
237237
// KEYWORD_LAST-NEXT: Keyword/None: discardableResult[#Declaration Attribute#]; name=discardableResult
238238
// KEYWORD_LAST-NEXT: Keyword/None: GKInspectable[#Declaration Attribute#]; name=GKInspectable{{$}}
239-
// KEYWORD_LAST-NEXT: Keyword/None: _propertyWrapper[#Declaration Attribute#]; name=_propertyWrapper
239+
// KEYWORD_LAST-NEXT: Keyword/None: propertyWrapper[#Declaration Attribute#]; name=propertyWrapper
240240
// KEYWORD_LAST-NEXT: Keyword/None: _functionBuilder[#Declaration Attribute#]; name=_functionBuilder{{$}}
241241
// KEYWORD_LAST-NEXT: Keyword/None: IBSegueAction[#Declaration Attribute#]; name=IBSegueAction{{$}}
242242
// KEYWORD_LAST-NOT: Keyword

branches/rxwei-patch-1/test/IDE/complete_property_delegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SELF_VARNAME | %FileCheck %s -check-prefix=CONTEXT_VARNAME
77
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SELF_DOLLAR_VARNAME | %FileCheck %s -check-prefix=CONTEXT_DOLLAR_VARNAME
88

9-
@_propertyWrapper
9+
@propertyWrapper
1010
struct Lazzzy<T> {
1111
var value: T
1212

branches/rxwei-patch-1/test/IDE/complete_property_delegate_attribute.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ enum MyEnum {
66
case east, west
77
}
88

9-
@_propertyWrapper
9+
@propertyWrapper
1010
struct MyStruct {
1111
var value: MyEnum
1212
init(initialValue: MyEnum) {}

branches/rxwei-patch-1/test/IDE/print_property_wrappers.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// Directly printing the type-checked AST
44
// RUN: %target-swift-ide-test -print-ast-typechecked -source-filename %s | %FileCheck %s
55

6-
@_propertyWrapper
6+
@propertyWrapper
77
struct Wrapper<Value> {
88
var _stored: Value?
99

@@ -47,9 +47,9 @@ struct HasWrappers {
4747
var z: String
4848

4949
// Memberwise initializer.
50-
// CHECK: init(x: Wrapper<Int> = Wrapper(closure: foo), y: Bool = true, z: Wrapper<String> = Wrapper())
50+
// CHECK: init(x: Wrapper<Int> = Wrapper(closure: foo), y: Bool = true, z: String)
5151
}
5252

5353
func trigger() {
54-
_ = HasWrappers(y: false)
54+
_ = HasWrappers(y: false, z: "hello")
5555
}

branches/rxwei-patch-1/test/Index/property_wrappers.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// RUN: %target-swift-ide-test -print-indexed-symbols -source-filename %s | %FileCheck -check-prefix=CHECK %s
22

3-
@_propertyWrapper
3+
@propertyWrapper
44
public struct Wrapper<T> {
55
public var value: T
66

branches/rxwei-patch-1/test/ParseableInterface/property_wrappers.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
// RUN: %target-swift-frontend -build-module-from-parseable-interface -swift-version 5 %t/TestResilient.swiftinterface -o %t/TestResilient.swiftmodule
77
// RUN: %target-swift-frontend -emit-module -o /dev/null -merge-modules -swift-version 5 -emit-parseable-module-interface-path - %t/TestResilient.swiftmodule -module-name TestResilient | %FileCheck %s --check-prefix CHECK --check-prefix RESILIENT
88

9-
@_propertyWrapper
9+
@propertyWrapper
1010
public struct Wrapper<T> {
1111
public var value: T
1212
}
1313

14-
@_propertyWrapper
14+
@propertyWrapper
1515
public struct WrapperWithInitialValue<T> {
1616
public var value: T
1717

0 commit comments

Comments
 (0)