13#ifndef LLVM_CLANG_AST_INTERP_STATE_H
14#define LLVM_CLANG_AST_INTERP_STATE_H
112 diag::kind DiagId = diag::note_invalid_subexpr_in_const_expr,
113 unsigned ExtraNotes = 0);
117 diag::kind DiagId = diag::note_invalid_subexpr_in_const_expr,
118 unsigned ExtraNotes = 0);
122 diag::kind DiagId = diag::note_invalid_subexpr_in_const_expr,
123 unsigned ExtraNotes = 0);
132 diag::kind DiagId = diag::note_invalid_subexpr_in_const_expr,
133 unsigned ExtraNotes = 0);
137 diag::kind DiagId = diag::note_invalid_subexpr_in_const_expr,
138 unsigned ExtraNotes = 0);
142 diag::kind DiagId = diag::note_invalid_subexpr_in_const_expr,
143 unsigned ExtraNotes = 0);
176 void addCallStack(
unsigned Limit);
181 unsigned ExtraNotes,
bool IsCCEDiag);
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
A little helper class used to produce diagnostics.
This represents one expression.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
A partial diagnostic which we might know in advance that we are not going to emit.
Encodes a location in the source.
Base class for stack frames, shared between VM and walker.
Describes the statement/declaration an opcode was generated from.
bool checkingForUndefinedBehavior() const
Are we checking an expression for overflow?
virtual bool hasActiveDiagnostic()=0
virtual void setActiveDiagnostic(bool Flag)=0
DiagnosticBuilder report(SourceLocation Loc, diag::kind DiagId)
Directly reports a diagnostic message.
virtual Frame * getCurrentFrame()=0
virtual bool noteUndefinedBehavior()=0
OptionalDiagnostic FFDiag(SourceLocation Loc, diag::kind DiagId=diag::note_invalid_subexpr_in_const_expr, unsigned ExtraNotes=0)
Diagnose that the evaluation could not be folded (FF => FoldFailure)
bool CheckingPotentialConstantExpression
Whether we're checking that an expression is a potential constant expression.
virtual Expr::EvalStatus & getEvalStatus() const =0
virtual unsigned getCallStackDepth()=0
bool CheckingForUndefinedBehavior
Whether we're checking for an expression that has undefined behavior.
virtual bool keepEvaluatingAfterFailure() const =0
void addNotes(ArrayRef< PartialDiagnosticAt > Diags)
Add a stack of notes to a prior diagnostic.
virtual const Frame * getBottomFrame() const =0
const LangOptions & getLangOpts() const
OptionalDiagnostic CCEDiag(SourceLocation Loc, diag::kind DiagId=diag::note_invalid_subexpr_in_const_expr, unsigned ExtraNotes=0)
Diagnose that the evaluation does not produce a C++11 core constant expression.
virtual void setFoldFailureDiagnostic(bool Flag)=0
virtual bool noteSideEffect()=0
virtual bool hasPriorDiagnostic()=0
bool checkingPotentialConstantExpression() const
Are we checking whether the expression is a potential constant expression?
virtual bool keepEvaluatingAfterSideEffect() const =0
bool InConstantContext
Whether or not we're in a context where the front end requires a constant value.
virtual ASTContext & getASTContext() const =0
unsigned kind
All of the diagnostics that can be emitted by the frontend.
The JSON file list parser is used to communicate input to InstallAPI.
CheckSubobjectKind
The order of this enum is important for diagnostics.
AccessKinds
Kinds of access we can perform on an object, for diagnostics.
@ AK_ReadObjectRepresentation
@ ConstantFold
Fold the expression to a constant.
@ ConstantExpressionUnevaluated
Evaluate as a constant expression.
@ ConstantExpression
Evaluate as a constant expression.
@ IgnoreSideEffects
Evaluate in any way we know how.
EvalStatus is a struct with detailed info about an evaluation in progress.