@@ -161,8 +161,6 @@ class AttributeChecker : public AttributeVisitor<AttributeChecker> {
161161 IGNORED_ATTR(BackDeployed)
162162 IGNORED_ATTR(Documentation)
163163 IGNORED_ATTR(LexicalLifetimes)
164- IGNORED_ATTR(NonEscapable)
165- IGNORED_ATTR(UnsafeNonEscapableResult)
166164#undef IGNORED_ATTR
167165
168166 void visitAlignmentAttr (AlignmentAttr *attr) {
@@ -349,6 +347,9 @@ class AttributeChecker : public AttributeVisitor<AttributeChecker> {
349347 void visitMacroRoleAttr (MacroRoleAttr *attr);
350348
351349 void visitRawLayoutAttr (RawLayoutAttr *attr);
350+
351+ void visitNonEscapableAttr (NonEscapableAttr *attr);
352+ void visitUnsafeNonEscapableResultAttr (UnsafeNonEscapableResultAttr *attr);
352353};
353354
354355} // end anonymous namespace
@@ -7060,6 +7061,19 @@ void AttributeChecker::visitRawLayoutAttr(RawLayoutAttr *attr) {
70607061 sd->setHasUnreferenceableStorage (true );
70617062}
70627063
7064+ void AttributeChecker::visitNonEscapableAttr (NonEscapableAttr *attr) {
7065+ if (!Ctx.LangOpts .hasFeature (Feature::NonEscapableTypes)) {
7066+ diagnoseAndRemoveAttr (attr, diag::nonescapable_types_attr_disabled);
7067+ }
7068+ }
7069+
7070+ void AttributeChecker::visitUnsafeNonEscapableResultAttr (
7071+ UnsafeNonEscapableResultAttr *attr) {
7072+ if (!Ctx.LangOpts .hasFeature (Feature::NonEscapableTypes)) {
7073+ diagnoseAndRemoveAttr (attr, diag::nonescapable_types_attr_disabled);
7074+ }
7075+ }
7076+
70637077namespace {
70647078
70657079class ClosureAttributeChecker
0 commit comments