diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index ee661f0fc1ab5..5a2013bd53a7a 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -7325,7 +7325,8 @@ TreeTransform::TransformAttributedStmt(AttributedStmt *S, for (const auto *I : S->getAttrs()) { const Attr *R = getDerived().TransformAttr(I); AttrsChanged |= (I != R); - Attrs.push_back(R); + if (R) + Attrs.push_back(R); } StmtResult SubStmt = getDerived().TransformStmt(S->getSubStmt(), SDK); @@ -7335,6 +7336,11 @@ TreeTransform::TransformAttributedStmt(AttributedStmt *S, if (SubStmt.get() == S->getSubStmt() && !AttrsChanged) return S; + // If transforming the attributes failed for all of the attributes in the + // statement, don't make an AttributedStmt without attributes. + if (Attrs.empty()) + return SubStmt; + return getDerived().RebuildAttributedStmt(S->getAttrLoc(), Attrs, SubStmt.get()); }