Skip to content

Commit 008b33e

Browse files
authored
Merge pull request #30896 from hborla/property-wrapper-invalid-redeclaration
[Property Wrappers] Improve error recovery in buildStorageReference.
2 parents d951279 + 32c338f commit 008b33e

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

lib/Sema/TypeCheckStorage.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,7 @@ static Expr *buildStorageReference(AccessorDecl *accessor,
686686
auto *backing = var->getPropertyWrapperBackingProperty();
687687

688688
// Error recovery.
689-
if (!backing)
689+
if (!backing || backing->isInvalid())
690690
return nullptr;
691691

692692
storage = backing;
@@ -729,7 +729,7 @@ static Expr *buildStorageReference(AccessorDecl *accessor,
729729
auto *backing = var->getPropertyWrapperBackingProperty();
730730

731731
// Error recovery.
732-
if (!backing)
732+
if (!backing || backing->isInvalid())
733733
return nullptr;
734734

735735
storage = backing;

test/decl/var/property_wrappers.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,26 @@ struct S {
825825
var wrappedValue: Int
826826
}
827827

828+
// ---------------------------------------------------------------------------
829+
// Invalid redeclaration
830+
// ---------------------------------------------------------------------------
831+
@propertyWrapper
832+
struct WrapperWithProjectedValue<T> {
833+
var wrappedValue: T
834+
var projectedValue: T { return wrappedValue }
835+
}
836+
837+
class TestInvalidRedeclaration {
838+
@WrapperWithProjectedValue var i = 17
839+
// expected-note@-1 {{'i' previously declared here}}
840+
// expected-note@-2 {{'$i' previously declared here}}
841+
// expected-note@-3 {{'_i' previously declared here}}
842+
@WrapperWithProjectedValue var i = 39
843+
// expected-error@-1 {{invalid redeclaration of 'i'}}
844+
// expected-error@-2 {{invalid redeclaration of '$i'}}
845+
// expected-error@-3 {{invalid redeclaration of '_i'}}
846+
}
847+
828848
// ---------------------------------------------------------------------------
829849
// Closures in initializers
830850
// ---------------------------------------------------------------------------

0 commit comments

Comments
 (0)