Lines Matching refs:A
28 static Attr *handleFallThroughAttr(Sema &S, Stmt *St, const ParsedAttr &A, in handleFallThroughAttr() argument
30 FallThroughAttr Attr(S.Context, A); in handleFallThroughAttr()
32 S.Diag(A.getRange().getBegin(), diag::err_fallthrough_attr_wrong_target) in handleFallThroughAttr()
33 << A << St->getBeginLoc(); in handleFallThroughAttr()
41 S.Diag(A.getRange().getBegin(), diag::err_fallthrough_attr_outside_switch); in handleFallThroughAttr()
47 if (!S.getLangOpts().CPlusPlus17 && A.isCXX11Attribute() && in handleFallThroughAttr()
48 !A.getScopeName()) in handleFallThroughAttr()
49 S.Diag(A.getLoc(), diag::ext_cxx17_attr) << A; in handleFallThroughAttr()
52 return ::new (S.Context) FallThroughAttr(S.Context, A); in handleFallThroughAttr()
55 static Attr *handleSuppressAttr(Sema &S, Stmt *St, const ParsedAttr &A, in handleSuppressAttr() argument
57 if (A.getAttributeSpellingListIndex() == SuppressAttr::CXX11_gsl_suppress && in handleSuppressAttr()
58 A.getNumArgs() < 1) { in handleSuppressAttr()
60 S.Diag(A.getLoc(), diag::err_attribute_too_few_arguments) << A << 1; in handleSuppressAttr()
65 for (unsigned I = 0, E = A.getNumArgs(); I != E; ++I) { in handleSuppressAttr()
68 if (!S.checkStringLiteralArgumentAttr(A, I, RuleName, nullptr)) in handleSuppressAttr()
75 S.Context, A, DiagnosticIdentifiers.data(), DiagnosticIdentifiers.size()); in handleSuppressAttr()
78 static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, in handleLoopHintAttr() argument
80 IdentifierLoc *PragmaNameLoc = A.getArgAsIdent(0); in handleLoopHintAttr()
81 IdentifierLoc *OptionLoc = A.getArgAsIdent(1); in handleLoopHintAttr()
82 IdentifierLoc *StateLoc = A.getArgAsIdent(2); in handleLoopHintAttr()
83 Expr *ValueExpr = A.getArgAsExpr(3); in handleLoopHintAttr()
189 return LoopHintAttr::CreateImplicit(S.Context, Option, State, ValueExpr, A); in handleLoopHintAttr()
219 static Attr *handleNoMergeAttr(Sema &S, Stmt *St, const ParsedAttr &A, in handleNoMergeAttr() argument
221 NoMergeAttr NMA(S.Context, A); in handleNoMergeAttr()
226 << A; in handleNoMergeAttr()
230 return ::new (S.Context) NoMergeAttr(S.Context, A); in handleNoMergeAttr()
236 const AttributeCommonInfo &A) { in CheckStmtInlineAttr() argument
253 << A; in CheckStmtInlineAttr()
267 << A << (Callee->hasAttr<OtherAttr>() ? DiagIdx : 1); in CheckStmtInlineAttr()
277 const AttributeCommonInfo &A) { in CheckNoInlineAttr() argument
278 return CheckStmtInlineAttr<AlwaysInlineAttr, 0>(*this, OrigSt, CurSt, A); in CheckNoInlineAttr()
282 const AttributeCommonInfo &A) { in CheckAlwaysInlineAttr() argument
283 return CheckStmtInlineAttr<NoInlineAttr, 2>(*this, OrigSt, CurSt, A); in CheckAlwaysInlineAttr()
286 static Attr *handleNoInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, in handleNoInlineAttr() argument
288 NoInlineAttr NIA(S.Context, A); in handleNoInlineAttr()
295 if (S.CheckNoInlineAttr(/*OrigSt=*/nullptr, St, A)) in handleNoInlineAttr()
298 return ::new (S.Context) NoInlineAttr(S.Context, A); in handleNoInlineAttr()
301 static Attr *handleAlwaysInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, in handleAlwaysInlineAttr() argument
303 AlwaysInlineAttr AIA(S.Context, A); in handleAlwaysInlineAttr()
310 if (S.CheckAlwaysInlineAttr(/*OrigSt=*/nullptr, St, A)) in handleAlwaysInlineAttr()
313 return ::new (S.Context) AlwaysInlineAttr(S.Context, A); in handleAlwaysInlineAttr()
316 static Attr *handleCXXAssumeAttr(Sema &S, Stmt *St, const ParsedAttr &A, in handleCXXAssumeAttr() argument
318 ExprResult Res = S.ActOnCXXAssumeAttr(St, A, Range); in handleCXXAssumeAttr()
322 return ::new (S.Context) CXXAssumeAttr(S.Context, A, Res.get()); in handleCXXAssumeAttr()
325 static Attr *handleMustTailAttr(Sema &S, Stmt *St, const ParsedAttr &A, in handleMustTailAttr() argument
328 return ::new (S.Context) MustTailAttr(S.Context, A); in handleMustTailAttr()
331 static Attr *handleLikely(Sema &S, Stmt *St, const ParsedAttr &A, in handleLikely() argument
334 if (!S.getLangOpts().CPlusPlus20 && A.isCXX11Attribute() && !A.getScopeName()) in handleLikely()
335 S.Diag(A.getLoc(), diag::ext_cxx20_attr) << A << Range; in handleLikely()
337 return ::new (S.Context) LikelyAttr(S.Context, A); in handleLikely()
340 static Attr *handleUnlikely(Sema &S, Stmt *St, const ParsedAttr &A, in handleUnlikely() argument
343 if (!S.getLangOpts().CPlusPlus20 && A.isCXX11Attribute() && !A.getScopeName()) in handleUnlikely()
344 S.Diag(A.getLoc(), diag::ext_cxx20_attr) << A << Range; in handleUnlikely()
346 return ::new (S.Context) UnlikelyAttr(S.Context, A); in handleUnlikely()
376 static Attr *handleCodeAlignAttr(Sema &S, Stmt *St, const ParsedAttr &A) { in handleCodeAlignAttr() argument
378 Expr *E = A.getArgAsExpr(0); in handleCodeAlignAttr()
379 return S.BuildCodeAlignAttr(A, E); in handleCodeAlignAttr()
386 auto FindFunc = [](const Attr *A) { return isa<const LoopAttrT>(A); }; in CheckForDuplicateLoopAttrs() argument
423 static Attr *handleMSConstexprAttr(Sema &S, Stmt *St, const ParsedAttr &A, in handleMSConstexprAttr() argument
426 S.Diag(A.getLoc(), diag::warn_unknown_attribute_ignored) in handleMSConstexprAttr()
427 << A << A.getRange(); in handleMSConstexprAttr()
430 return ::new (S.Context) MSConstexprAttr(S.Context, A); in handleMSConstexprAttr()
557 static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A, in handleOpenCLUnrollHint() argument
565 if (A.getNumArgs() == 1) { in handleOpenCLUnrollHint()
566 Expr *E = A.getArgAsExpr(0); in handleOpenCLUnrollHint()
570 S.Diag(A.getLoc(), diag::err_attribute_argument_type) in handleOpenCLUnrollHint()
571 << A << AANT_ArgumentIntegerConstant << E->getSourceRange(); in handleOpenCLUnrollHint()
577 S.Diag(A.getRange().getBegin(), in handleOpenCLUnrollHint()
579 << A << /* positive */ 0; in handleOpenCLUnrollHint()
585 return ::new (S.Context) OpenCLUnrollHintAttr(S.Context, A, UnrollFactor); in handleOpenCLUnrollHint()
588 static Attr *handleHLSLLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, in handleHLSLLoopHintAttr() argument
591 if (A.getSemanticSpelling() == HLSLLoopHintAttr::Spelling::Microsoft_loop && in handleHLSLLoopHintAttr()
592 !A.checkAtMostNumArgs(S, 0)) in handleHLSLLoopHintAttr()
596 if (A.getNumArgs() == 1) { in handleHLSLLoopHintAttr()
598 if (A.isArgIdent(0)) { in handleHLSLLoopHintAttr()
599 S.Diag(A.getLoc(), diag::err_attribute_argument_type) in handleHLSLLoopHintAttr()
600 << A << AANT_ArgumentIntegerConstant << A.getRange(); in handleHLSLLoopHintAttr()
604 Expr *E = A.getArgAsExpr(0); in handleHLSLLoopHintAttr()
618 return ::new (S.Context) HLSLLoopHintAttr(S.Context, A, UnrollFactor); in handleHLSLLoopHintAttr()
621 static Attr *ProcessStmtAttribute(Sema &S, Stmt *St, const ParsedAttr &A, in ProcessStmtAttribute() argument
623 if (A.isInvalid() || A.getKind() == ParsedAttr::IgnoredAttribute) in ProcessStmtAttribute()
630 if (A.getKind() == ParsedAttr::UnknownAttribute || in ProcessStmtAttribute()
631 !(A.existsInTarget(S.Context.getTargetInfo()) || in ProcessStmtAttribute()
633 A.existsInTarget(*Aux)))) { in ProcessStmtAttribute()
634 S.Diag(A.getLoc(), A.isRegularKeywordAttribute() in ProcessStmtAttribute()
636 : A.isDeclspecAttribute() in ProcessStmtAttribute()
639 << A << A.getRange(); in ProcessStmtAttribute()
643 if (S.checkCommonAttributeFeatures(St, A)) in ProcessStmtAttribute()
646 switch (A.getKind()) { in ProcessStmtAttribute()
648 return handleAlwaysInlineAttr(S, St, A, Range); in ProcessStmtAttribute()
650 return handleCXXAssumeAttr(S, St, A, Range); in ProcessStmtAttribute()
652 return handleFallThroughAttr(S, St, A, Range); in ProcessStmtAttribute()
654 return handleLoopHintAttr(S, St, A, Range); in ProcessStmtAttribute()
656 return handleHLSLLoopHintAttr(S, St, A, Range); in ProcessStmtAttribute()
658 return handleOpenCLUnrollHint(S, St, A, Range); in ProcessStmtAttribute()
660 return handleSuppressAttr(S, St, A, Range); in ProcessStmtAttribute()
662 return handleNoMergeAttr(S, St, A, Range); in ProcessStmtAttribute()
664 return handleNoInlineAttr(S, St, A, Range); in ProcessStmtAttribute()
666 return handleMustTailAttr(S, St, A, Range); in ProcessStmtAttribute()
668 return handleLikely(S, St, A, Range); in ProcessStmtAttribute()
670 return handleUnlikely(S, St, A, Range); in ProcessStmtAttribute()
672 return handleCodeAlignAttr(S, St, A); in ProcessStmtAttribute()
674 return handleMSConstexprAttr(S, St, A, Range); in ProcessStmtAttribute()
679 S.Diag(A.getRange().getBegin(), diag::err_decl_attribute_invalid_on_stmt) in ProcessStmtAttribute()
680 << A << A.isRegularKeywordAttribute() << St->getBeginLoc(); in ProcessStmtAttribute()
688 if (const Attr *A = ProcessStmtAttribute(*this, S, AL, InAttrs.Range)) in ProcessStmtAttributes() local
689 OutAttrs.push_back(A); in ProcessStmtAttributes()
701 ExprResult Sema::ActOnCXXAssumeAttr(Stmt *St, const ParsedAttr &A, in ActOnCXXAssumeAttr() argument
703 if (A.getNumArgs() != 1 || !A.getArgAsExpr(0)) { in ActOnCXXAssumeAttr()
704 Diag(A.getLoc(), diag::err_attribute_wrong_number_arguments) in ActOnCXXAssumeAttr()
705 << A.getAttrName() << 1 << Range; in ActOnCXXAssumeAttr()
709 auto *Assumption = A.getArgAsExpr(0); in ActOnCXXAssumeAttr()
716 ExprResult Res = BuildCXXAssumeExpr(Assumption, A.getAttrName(), Range); in ActOnCXXAssumeAttr()
723 A.getSyntax() == AttributeCommonInfo::AS_CXX11) in ActOnCXXAssumeAttr()
724 Diag(A.getLoc(), diag::ext_cxx23_attr) << A << Range; in ActOnCXXAssumeAttr()