================ @@ -3867,6 +3869,117 @@ static void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) { S.Context, AL, EncodingIndices.data(), EncodingIndices.size())); } +LifetimeCaptureByAttr *Sema::ParseLifetimeCaptureByAttr(const ParsedAttr &AL, + StringRef ParamName) { + // Atleast one capture by is required. + if (AL.getNumArgs() == 0) { + Diag(AL.getLoc(), diag::err_capture_by_attribute_no_entity) + << AL.getRange(); + return nullptr; + } + unsigned N = AL.getNumArgs(); + IdentifierInfo **ParamIdents = new (Context) IdentifierInfo *[N]; + SourceLocation *ParamLocs = new (Context) SourceLocation[N]; + bool IsValid = true; + for (unsigned I = 0; I < N; ++I) { + if (AL.isArgExpr(I)) { + Expr *E = AL.getArgAsExpr(I); + Diag(E->getExprLoc(), diag::err_capture_by_attribute_argument_unknown) + << E << E->getExprLoc(); + IsValid = false; + continue; + } + assert(AL.isArgIdent(I)); + IdentifierLoc *IdLoc = AL.getArgAsIdent(I); + if (IdLoc->Ident->getName() == ParamName) { + Diag(IdLoc->Loc, diag::err_capture_by_references_itself) << IdLoc->Loc; + IsValid = false; + continue; + } + ParamIdents[I] = IdLoc->Ident; + ParamLocs[I] = IdLoc->Loc; + } + if (!IsValid) + return nullptr; + SmallVector<int> FakeParamIndices(N, LifetimeCaptureByAttr::INVALID); + LifetimeCaptureByAttr *CapturedBy = ::new (Context) LifetimeCaptureByAttr( ---------------- hokein wrote:
I haven't seen the change in the latest version. > Added this as a function to the Attribute API. Do we need to do this? I thought this `create` is automatically generated. https://github.com/llvm/llvm-project/pull/115823 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits