#include "clang/AST/ASTContext.h"
#include "clang/AST/EvaluatedExprVisitor.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Sema/DelayedDiagnostic.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/ParsedAttr.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/SemaInternal.h"
#include "llvm/ADT/StringExtras.h"
#include <optional>
usingnamespaceclang;
usingnamespacesema;
static Attr *handleFallThroughAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
static Attr *handleSuppressAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange) { … }
namespace {
class CallExprFinder : public ConstEvaluatedExprVisitor<CallExprFinder> { … };
}
static Attr *handleNoMergeAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
static Attr *handleNoConvergentAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
template <typename OtherAttr, int DiagIdx>
static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt,
const Stmt *CurSt,
const AttributeCommonInfo &A) { … }
bool Sema::CheckNoInlineAttr(const Stmt *OrigSt, const Stmt *CurSt,
const AttributeCommonInfo &A) { … }
bool Sema::CheckAlwaysInlineAttr(const Stmt *OrigSt, const Stmt *CurSt,
const AttributeCommonInfo &A) { … }
static Attr *handleNoInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
static Attr *handleAlwaysInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
static Attr *handleCXXAssumeAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
static Attr *handleMustTailAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
static Attr *handleLikely(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
static Attr *handleUnlikely(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
CodeAlignAttr *Sema::BuildCodeAlignAttr(const AttributeCommonInfo &CI,
Expr *E) { … }
static Attr *handleCodeAlignAttr(Sema &S, Stmt *St, const ParsedAttr &A) { … }
template <typename LoopAttrT>
static void CheckForDuplicateLoopAttrs(Sema &S, ArrayRef<const Attr *> Attrs) { … }
static Attr *handleMSConstexprAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
#define WANT_STMT_MERGE_LOGIC
#include "clang/Sema/AttrParsedAttrImpl.inc"
#undef WANT_STMT_MERGE_LOGIC
static void
CheckForIncompatibleAttributes(Sema &S,
const SmallVectorImpl<const Attr *> &Attrs) { … }
static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
static Attr *handleHLSLLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
static Attr *ProcessStmtAttribute(Sema &S, Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
void Sema::ProcessStmtAttributes(Stmt *S, const ParsedAttributes &InAttrs,
SmallVectorImpl<const Attr *> &OutAttrs) { … }
bool Sema::CheckRebuiltStmtAttributes(ArrayRef<const Attr *> Attrs) { … }
ExprResult Sema::ActOnCXXAssumeAttr(Stmt *St, const ParsedAttr &A,
SourceRange Range) { … }
ExprResult Sema::BuildCXXAssumeExpr(Expr *Assumption,
const IdentifierInfo *AttrName,
SourceRange Range) { … }