Lines Matching defs:A

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