32 if (!Func || !Func->
hasBody()) {
37 Parent.FFDiag(Err.getRange().getBegin(),
38 diag::err_experimental_clang_interp_failed)
46 if (!Run(
Parent, Func, DummyResult)) {
56 if (Check(
Parent,
C.interpretExpr(E))) {
74 if (Check(
Parent,
C.interpretDecl(VD))) {
137 if (
const auto *AT = dyn_cast<AtomicType>(T))
138 return classify(AT->getValueType());
140 if (
const auto *DT = dyn_cast<DecltypeType>(T))
141 return classify(DT->getUnderlyingType());
143 if (
const auto *DT = dyn_cast<MemberPointerType>(T))
144 return classify(DT->getPointeeType());
172 Parent.FFDiag(Err.getRange().getBegin(),
173 diag::err_experimental_clang_interp_failed)
202 if (
Base == StaticDecl ||
Base->isDerivedFrom(StaticDecl)) {
210 "Couldn't find an overriding function in the class hierarchy?");
216 const Function *Func = P->getFunction(FD);
223 if (!Func || WasNotDefined) {
227 llvm::consumeError(R.takeError());
APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat],...
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
unsigned getIntWidth(QualType T) const
const llvm::fltSemantics & getFloatTypeSemantics(QualType T) const
Return the APFloat 'semantics' for the specified scalar floating point type.
const LangOptions & getLangOpts() const
const TargetInfo & getTargetInfo() const
Represents a base class of a C++ class.
QualType getType() const
Retrieves the type of the base class.
Represents a static or instance method of a struct/union/class.
CXXMethodDecl * getCorrespondingMethodDeclaredInClass(const CXXRecordDecl *RD, bool MayBeBase=false)
Find if RD declares a function that overrides this function, and if so, return it.
Represents a C++ struct/union/class.
unsigned getNumBases() const
Retrieves the number of base classes of this class.
base_class_iterator bases_begin()
This represents one expression.
Represents a function declaration or definition.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
A (possibly-)qualified type.
unsigned getCharWidth() const
CXXRecordDecl * getAsCXXRecordDecl() const
Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or beca...
bool isBooleanType() const
bool isFunctionReferenceType() const
bool isSignedIntegerOrEnumerationType() const
Determines whether this is an integer type that is signed or an enumeration types whose underlying ty...
bool isUnsignedIntegerOrEnumerationType() const
Determines whether this is an integer type that is unsigned or an enumeration types whose underlying ...
bool isFunctionPointerType() const
bool isPointerType() const
bool isReferenceType() const
bool isSpecificBuiltinType(unsigned K) const
Test for a particular builtin type.
bool isFunctionType() const
bool isFloatingType() const
bool isNullPtrType() const
Represents a variable declaration or definition.
Compilation context for expressions.
Compilation context for statements.
const LangOptions & getLangOpts() const
Returns the language options.
~Context()
Cleans up the constexpr VM.
Context(ASTContext &Ctx)
Initialises the constexpr VM.
unsigned getCharBit() const
Returns CHAR_BIT.
bool evaluateAsInitializer(State &Parent, const VarDecl *VD, APValue &Result)
Evaluates a toplevel initializer.
const llvm::fltSemantics & getFloatSemantics(QualType T) const
Return the floating-point semantics for T.
bool isPotentialConstantExpr(State &Parent, const FunctionDecl *FnDecl)
Checks if a function is a potential constant expression.
bool evaluateAsRValue(State &Parent, const Expr *E, APValue &Result)
Evaluates a toplevel expression as an rvalue.
const CXXMethodDecl * getOverridingFunction(const CXXRecordDecl *DynamicDecl, const CXXRecordDecl *StaticDecl, const CXXMethodDecl *InitialFunction) const
std::optional< PrimType > classify(QualType T) const
Classifies an expression.
const Function * getOrCreateFunction(const FunctionDecl *FD)
bool isFullyCompiled() const
Checks if the function is fully done compiling.
bool hasBody() const
Checks if the function already has a body attached.
bool isConstexpr() const
Checks if the function is valid to call in constexpr.
Frame storing local variables.
void clear()
Clears the stack without calling any destructors.
bool empty() const
Returns whether the stack is empty.
The program contains and links the bytecode for all functions.
Interface for the VM to interact with the AST walker's context.
Defines the clang::TargetInfo interface.
bool Interpret(InterpState &S, APValue &Result)
Interpreter entry point.
@ C
Languages that the frontend can parse and compile.
@ Result
The result type of a method or function.
Error thrown by the compiler.