Skip to content

Commit d70059e

Browse files
committed
[embedded] Check ReferenceOwnership in TypeCheckAttr instead of the parser
1 parent baacf12 commit d70059e

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

lib/Parse/ParseDecl.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3055,14 +3055,6 @@ ParserStatus Parser::parseNewDeclAttribute(DeclAttributes &Attributes,
30553055
AttrRange = SourceRange(Loc);
30563056
}
30573057

3058-
// Embedded Swift prohibits weak/unowned but allows unowned(unsafe).
3059-
if (Context.LangOpts.hasFeature(Feature::Embedded)) {
3060-
if (Kind == ReferenceOwnership::Weak ||
3061-
Kind == ReferenceOwnership::Unowned) {
3062-
diagnose(Loc, diag::weak_unowned_in_embedded_swift, Kind);
3063-
}
3064-
}
3065-
30663058
if (!DiscardAttribute)
30673059
Attributes.add(
30683060
new (Context) ReferenceOwnershipAttr(AttrRange, Kind));

lib/Sema/TypeCheckAttr.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4682,6 +4682,16 @@ Type TypeChecker::checkReferenceOwnershipAttr(VarDecl *var, Type type,
46824682
attr->setInvalid();
46834683
}
46844684

4685+
// Embedded Swift prohibits weak/unowned but allows unowned(unsafe).
4686+
if (var->getASTContext().LangOpts.hasFeature(Feature::Embedded)) {
4687+
if (ownershipKind == ReferenceOwnership::Weak ||
4688+
ownershipKind == ReferenceOwnership::Unowned) {
4689+
Diags.diagnose(attr->getLocation(), diag::weak_unowned_in_embedded_swift,
4690+
ownershipKind);
4691+
attr->setInvalid();
4692+
}
4693+
}
4694+
46854695
if (attr->isInvalid())
46864696
return type;
46874697

0 commit comments

Comments
 (0)