Lines Matching defs:S
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)
34 SourceLocation L = S.getLocForEndOfToken(Range.getEnd());
35 S.Diag(L, diag::note_fallthrough_insert_semi_fixit)
39 auto *FnScope = S.getCurFunction();
41 S.Diag(A.getRange().getBegin(), diag::err_fallthrough_attr_outside_switch);
47 if (!S.getLangOpts().CPlusPlus17 && A.isCXX11Attribute() &&
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,
60 S.Diag(A.getLoc(), diag::err_attribute_too_few_arguments) << A << 1;
68 if (!S.checkStringLiteralArgumentAttr(A, I, RuleName, nullptr))
74 return ::new (S.Context) SuppressAttr(
75 S.Context, A, DiagnosticIdentifiers.data(), DiagnosticIdentifiers.size());
78 static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A,
96 S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;
104 LoopHintAttr::LoopHintState S) {
106 State = S;
115 auto Value = ValueExpr->EvaluateKnownConstInt(S.getASTContext());
153 if (ValueExpr && S.CheckLoopHintExpr(ValueExpr, St->getBeginLoc(),
164 if (S.CheckLoopHintExpr(ValueExpr, St->getBeginLoc(),
189 return LoopHintAttr::CreateImplicit(S.Context, Option, State, ValueExpr, A);
200 CallExprFinder(Sema &S, const Stmt *St) : Inherited(S.Context) { Visit(St); }
209 void VisitAsmStmt(const AsmStmt *S) { FoundAsmStmt = true; }
219 static Attr *handleNoMergeAttr(Sema &S, Stmt *St, const ParsedAttr &A,
221 NoMergeAttr NMA(S.Context, A);
222 CallExprFinder CEF(S, St);
225 S.Diag(St->getBeginLoc(), diag::warn_attribute_ignored_no_calls_in_stmt)
230 return ::new (S.Context) NoMergeAttr(S.Context, A);
286 static Attr *handleNoInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A,
288 NoInlineAttr NIA(S.Context, A);
290 S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt)
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);
305 S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt)
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) {
379 return S.BuildCodeAlignAttr(A, E);
385 static void CheckForDuplicateLoopAttrs(Sema &S, ArrayRef<const Attr *> Attrs) {
415 S.Diag((*LastFoundItr)->getLocation(), diag::err_loop_attr_conflict)
417 S.Diag((*FirstItr)->getLocation(), diag::note_previous_attribute);
423 static Attr *handleMSConstexprAttr(Sema &S, Stmt *St, const ParsedAttr &A,
425 if (!S.getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2022_3)) {
426 S.Diag(A.getLoc(), diag::warn_unknown_attribute_ignored)
430 return ::new (S.Context) MSConstexprAttr(S.Context, A);
438 CheckForIncompatibleAttributes(Sema &S,
446 if (!DiagnoseMutualExclusions(S, Attrs))
534 PrintingPolicy Policy(S.Context.getLangOpts());
538 S.Diag(OptionLoc, diag::err_pragma_loop_compatibility)
549 S.Diag(OptionLoc, diag::err_pragma_loop_compatibility)
557 static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A,
569 if (!(ArgVal = E->getIntegerConstantExpr(S.Context))) {
570 S.Diag(A.getLoc(), diag::err_attribute_argument_type)
577 S.Diag(A.getRange().getBegin(),
585 return ::new (S.Context) OpenCLUnrollHintAttr(S.Context, A, UnrollFactor);
588 static Attr *handleHLSLLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A,
592 !A.checkAtMostNumArgs(S, 0))
599 S.Diag(A.getLoc(), diag::err_attribute_argument_type)
606 if (S.CheckLoopHintExpr(E, St->getBeginLoc(),
610 std::optional<llvm::APSInt> ArgVal = E->getIntegerConstantExpr(S.Context);
618 return ::new (S.Context) HLSLLoopHintAttr(S.Context, A, UnrollFactor);
621 static Attr *ProcessStmtAttribute(Sema &S, Stmt *St, const ParsedAttr &A,
629 const TargetInfo *Aux = S.Context.getAuxTargetInfo();
631 !(A.existsInTarget(S.Context.getTargetInfo()) ||
632 (S.Context.getLangOpts().SYCLIsDevice && Aux &&
634 S.Diag(A.getLoc(), A.isRegularKeywordAttribute()
643 if (S.checkCommonAttributeFeatures(St, A))
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)
685 void Sema::ProcessStmtAttributes(Stmt *S, const ParsedAttributes &InAttrs,
688 if (const Attr *A = ProcessStmtAttribute(*this, S, AL, InAttrs.Range))