clang
6.0.0
|
APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat], [Complex APSInt] [Complex APFloat], [Expr + Offset], [Vector: N * APValue], [Array: N * APValue]. More...
#include "clang/AST/APValue.h"
Classes | |
struct | LV |
union | LValuePathEntry |
struct | MemberPointerData |
struct | NoLValuePath |
struct | UninitArray |
struct | UninitStruct |
Public Types | |
enum | ValueKind { Uninitialized, Int, Float, ComplexInt, ComplexFloat, LValue, Vector, Array, Struct, Union, MemberPointer, AddrLabelDiff } |
typedef llvm::PointerUnion< const ValueDecl *, const Expr * > | LValueBase |
typedef llvm::PointerIntPair< const Decl *, 1, bool > | BaseOrMemberType |
Public Member Functions | |
APValue () | |
APValue (APSInt I) | |
APValue (APFloat F) | |
APValue (const APValue *E, unsigned N) | |
APValue (APSInt R, APSInt I) | |
APValue (APFloat R, APFloat I) | |
APValue (const APValue &RHS) | |
APValue (APValue &&RHS) | |
APValue (LValueBase B, const CharUnits &O, NoLValuePath N, unsigned CallIndex, bool IsNullPtr=false) | |
APValue (LValueBase B, const CharUnits &O, ArrayRef< LValuePathEntry > Path, bool OnePastTheEnd, unsigned CallIndex, bool IsNullPtr=false) | |
APValue (UninitArray, unsigned InitElts, unsigned Size) | |
APValue (UninitStruct, unsigned B, unsigned M) | |
APValue (const FieldDecl *D, const APValue &V=APValue()) | |
APValue (const ValueDecl *Member, bool IsDerivedMember, ArrayRef< const CXXRecordDecl *> Path) | |
APValue (const AddrLabelExpr *LHSExpr, const AddrLabelExpr *RHSExpr) | |
~APValue () | |
bool | needsCleanup () const |
Returns whether the object performed allocations. More... | |
void | swap (APValue &RHS) |
Swaps the contents of this and the given APValue. More... | |
ValueKind | getKind () const |
bool | isUninit () const |
bool | isInt () const |
bool | isFloat () const |
bool | isComplexInt () const |
bool | isComplexFloat () const |
bool | isLValue () const |
bool | isVector () const |
bool | isArray () const |
bool | isStruct () const |
bool | isUnion () const |
bool | isMemberPointer () const |
bool | isAddrLabelDiff () const |
void | dump () const |
void | dump (raw_ostream &OS) const |
void | printPretty (raw_ostream &OS, ASTContext &Ctx, QualType Ty) const |
std::string | getAsString (ASTContext &Ctx, QualType Ty) const |
APSInt & | getInt () |
const APSInt & | getInt () const |
APFloat & | getFloat () |
const APFloat & | getFloat () const |
APSInt & | getComplexIntReal () |
const APSInt & | getComplexIntReal () const |
APSInt & | getComplexIntImag () |
const APSInt & | getComplexIntImag () const |
APFloat & | getComplexFloatReal () |
const APFloat & | getComplexFloatReal () const |
APFloat & | getComplexFloatImag () |
const APFloat & | getComplexFloatImag () const |
const LValueBase | getLValueBase () const |
CharUnits & | getLValueOffset () |
const CharUnits & | getLValueOffset () const |
bool | isLValueOnePastTheEnd () const |
bool | hasLValuePath () const |
ArrayRef< LValuePathEntry > | getLValuePath () const |
unsigned | getLValueCallIndex () const |
bool | isNullPointer () const |
APValue & | getVectorElt (unsigned I) |
const APValue & | getVectorElt (unsigned I) const |
unsigned | getVectorLength () const |
APValue & | getArrayInitializedElt (unsigned I) |
const APValue & | getArrayInitializedElt (unsigned I) const |
bool | hasArrayFiller () const |
APValue & | getArrayFiller () |
const APValue & | getArrayFiller () const |
unsigned | getArrayInitializedElts () const |
unsigned | getArraySize () const |
unsigned | getStructNumBases () const |
unsigned | getStructNumFields () const |
APValue & | getStructBase (unsigned i) |
APValue & | getStructField (unsigned i) |
const APValue & | getStructBase (unsigned i) const |
const APValue & | getStructField (unsigned i) const |
const FieldDecl * | getUnionField () const |
APValue & | getUnionValue () |
const APValue & | getUnionValue () const |
const ValueDecl * | getMemberPointerDecl () const |
bool | isMemberPointerToDerivedMember () const |
ArrayRef< const CXXRecordDecl * > | getMemberPointerPath () const |
const AddrLabelExpr * | getAddrLabelDiffLHS () const |
const AddrLabelExpr * | getAddrLabelDiffRHS () const |
void | setInt (APSInt I) |
void | setFloat (APFloat F) |
void | setVector (const APValue *E, unsigned N) |
void | setComplexInt (APSInt R, APSInt I) |
void | setComplexFloat (APFloat R, APFloat I) |
void | setLValue (LValueBase B, const CharUnits &O, NoLValuePath, unsigned CallIndex, bool IsNullPtr) |
void | setLValue (LValueBase B, const CharUnits &O, ArrayRef< LValuePathEntry > Path, bool OnePastTheEnd, unsigned CallIndex, bool IsNullPtr) |
void | setUnion (const FieldDecl *Field, const APValue &Value) |
void | setAddrLabelDiff (const AddrLabelExpr *LHSExpr, const AddrLabelExpr *RHSExpr) |
APValue & | operator= (APValue RHS) |
Assign by swapping from a copy of the RHS. More... | |
APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat], [Complex APSInt] [Complex APFloat], [Expr + Offset], [Vector: N * APValue], [Array: N * APValue].
typedef llvm::PointerIntPair<const Decl *, 1, bool> clang::APValue::BaseOrMemberType |
typedef llvm::PointerUnion<const ValueDecl *, const Expr *> clang::APValue::LValueBase |
|
inlineexplicit |
Definition at line 124 of file APValue.h.
References setFloat().
|
inlineexplicit |
APValue::APValue | ( | const APValue & | RHS | ) |
Definition at line 124 of file APValue.cpp.
References Array, ComplexFloat, ComplexInt, Float, getArrayInitializedElts(), getArraySize(), getComplexFloatImag(), getComplexFloatReal(), getComplexIntImag(), getComplexIntReal(), getFloat(), getInt(), getKind(), getLValueBase(), getLValueCallIndex(), getLValueOffset(), getLValuePath(), getVectorLength(), hasLValuePath(), Int, isLValueOnePastTheEnd(), isNullPointer(), LValue, setComplexFloat(), setComplexInt(), setFloat(), setInt(), setLValue(), setVector(), Uninitialized, and Vector.
|
inline |
|
inline |
Definition at line 138 of file APValue.h.
References setLValue().
|
inline |
Definition at line 143 of file APValue.h.
References setLValue().
|
inline |
|
inline |
Definition at line 154 of file APValue.h.
References setUnion().
|
inline |
|
inline |
Definition at line 162 of file APValue.h.
References setAddrLabelDiff().
|
inline |
Definition at line 167 of file APValue.h.
References needsCleanup(), and swap().
LLVM_DUMP_METHOD void APValue::dump | ( | ) | const |
Definition at line 258 of file APValue.cpp.
Referenced by dump(), and isAddrLabelDiff().
void APValue::dump | ( | raw_ostream & | OS | ) | const |
Definition at line 271 of file APValue.cpp.
References Array, ComplexFloat, ComplexInt, dump(), Float, GetApproxValue(), getComplexFloatImag(), getComplexFloatReal(), getComplexIntImag(), getComplexIntReal(), getFloat(), getInt(), getKind(), getVectorElt(), getVectorLength(), Int, LValue, Uninitialized, and Vector.
|
inline |
Definition at line 340 of file APValue.h.
References isAddrLabelDiff().
|
inline |
Definition at line 344 of file APValue.h.
References isAddrLabelDiff().
|
inline |
Definition at line 284 of file APValue.h.
References getArrayInitializedElts(), hasArrayFiller(), and isArray().
Referenced by EvaluateVector(), and getArrayFiller().
|
inline |
Definition at line 289 of file APValue.h.
References getArrayFiller().
|
inline |
|
inline |
|
inline |
Definition at line 292 of file APValue.h.
References isArray().
Referenced by APValue(), expandArray(), getArrayFiller(), and hasArrayFiller().
|
inline |
Definition at line 296 of file APValue.h.
References isArray().
Referenced by APValue(), expandArray(), and hasArrayFiller().
std::string APValue::getAsString | ( | ASTContext & | Ctx, |
QualType | Ty | ||
) | const |
Definition at line 545 of file APValue.cpp.
References printPretty(), and clang::Result.
Referenced by CheckConvertedConstantExpression(), DiagnoseNarrowingInInitList(), and isAddrLabelDiff().
|
inline |
Definition at line 241 of file APValue.h.
References isComplexFloat().
Referenced by APValue(), dump(), getComplexFloatImag(), HandleConversionToBool(), IsSameFloatAfterCast(), needsCleanup(), printPretty(), and clang::CodeGen::ConstantEmitter::tryEmitPrivate().
|
inline |
Definition at line 245 of file APValue.h.
References getComplexFloatImag(), getLValueBase(), and getLValueOffset().
|
inline |
Definition at line 233 of file APValue.h.
References isComplexFloat().
Referenced by APValue(), dump(), getComplexFloatReal(), HandleConversionToBool(), IsSameFloatAfterCast(), needsCleanup(), printPretty(), and clang::CodeGen::ConstantEmitter::tryEmitPrivate().
|
inline |
Definition at line 237 of file APValue.h.
References getComplexFloatReal().
|
inline |
Definition at line 225 of file APValue.h.
References isComplexInt().
Referenced by APValue(), dump(), getComplexIntImag(), HandleConversionToBool(), needsCleanup(), printPretty(), and clang::CodeGen::ConstantEmitter::tryEmitPrivate().
|
inline |
Definition at line 229 of file APValue.h.
References getComplexIntImag().
|
inline |
Definition at line 217 of file APValue.h.
References isComplexInt().
Referenced by APValue(), dump(), getComplexIntReal(), GetValueRange(), HandleConversionToBool(), needsCleanup(), printPretty(), and clang::CodeGen::ConstantEmitter::tryEmitPrivate().
|
inline |
Definition at line 221 of file APValue.h.
References getComplexIntReal().
|
inline |
Definition at line 209 of file APValue.h.
References isFloat().
Referenced by APValue(), dump(), clang::CodeGen::CodeGenFunction::EmitBuiltinExpr(), EvalAndBitcastToAPInt(), getFloat(), clang::StandardConversionSequence::getNarrowingKind(), HandleConversionToBool(), IsSameFloatAfterCast(), needsCleanup(), printPretty(), and clang::CodeGen::ConstantEmitter::tryEmitPrivate().
|
inline |
Definition at line 213 of file APValue.h.
References getFloat().
|
inline |
Definition at line 201 of file APValue.h.
References isInt().
Referenced by addOrSubLValueAsInteger(), APValue(), dump(), clang::CodeGen::CodeGenFunction::EmitBuiltinExpr(), EvalAndBitcastToAPInt(), EvaluateCPlusPlus11IntegralConstantExpr(), EvaluateInteger(), EvaluatePointer(), GetAlignOfExpr(), getInt(), GetValueRange(), HandleConversionToBool(), needsCleanup(), printPretty(), shouldAddCase(), truncateBitfieldValue(), and clang::CodeGen::ConstantEmitter::tryEmitPrivate().
|
inline |
|
inline |
Definition at line 181 of file APValue.h.
Referenced by APValue(), dump(), EvaluateBuiltinConstantP(), HandleConversionToBool(), needsCleanup(), printPretty(), and clang::CodeGen::ConstantEmitter::tryEmitPrivate().
const APValue::LValueBase APValue::getLValueBase | ( | ) | const |
Definition at line 553 of file APValue.cpp.
References isLValue().
Referenced by addOrSubLValueAsInteger(), APValue(), EvalPointerValueAsBool(), getComplexFloatImag(), and printPretty().
unsigned APValue::getLValueCallIndex | ( | ) | const |
Definition at line 579 of file APValue.cpp.
References isLValue().
Referenced by APValue(), and getLValueOffset().
CharUnits & APValue::getLValueOffset | ( | ) |
Definition at line 563 of file APValue.cpp.
References isLValue().
Referenced by addOrSubLValueAsInteger(), APValue(), EvalPointerValueAsBool(), getComplexFloatImag(), getLValueOffset(), and printPretty().
|
inline |
Definition at line 251 of file APValue.h.
References getLValueCallIndex(), getLValueOffset(), getLValuePath(), hasLValuePath(), isLValueOnePastTheEnd(), and isNullPointer().
ArrayRef< APValue::LValuePathEntry > APValue::getLValuePath | ( | ) | const |
Definition at line 573 of file APValue.cpp.
References clang::APValue::LV::getPath(), hasLValuePath(), and isLValue().
Referenced by APValue(), and getLValueOffset().
const ValueDecl * APValue::getMemberPointerDecl | ( | ) | const |
Definition at line 615 of file APValue.cpp.
References isMemberPointer().
Referenced by CheckMemberPointerConstantExpression(), clang::CodeGen::CGCXXABI::getMemberPointerPathAdjustment(), getUnionValue(), and HandleConversionToBool().
ArrayRef< const CXXRecordDecl * > APValue::getMemberPointerPath | ( | ) | const |
Definition at line 629 of file APValue.cpp.
References Array, clang::APValue::MemberPointerData::getPath(), isMemberPointer(), isUninit(), LValue, MemberPointer, and clang::APValue::MemberPointerData::resizePath().
Referenced by clang::CodeGen::CGCXXABI::getMemberPointerPathAdjustment(), and getUnionValue().
|
inline |
|
inline |
Definition at line 317 of file APValue.h.
References getStructBase().
|
inline |
Definition at line 313 of file APValue.h.
References getStructNumBases(), and isStruct().
Referenced by getStructField().
|
inline |
Definition at line 320 of file APValue.h.
References getStructField().
|
inline |
|
inline |
Definition at line 305 of file APValue.h.
References isStruct().
|
inline |
|
inline |
|
inline |
Definition at line 332 of file APValue.h.
References getMemberPointerDecl(), getMemberPointerPath(), getUnionValue(), and isMemberPointerToDerivedMember().
|
inline |
Definition at line 260 of file APValue.h.
Referenced by dump(), EvalAndBitcastToAPInt(), EvaluateVector(), GetValueRange(), IsSameFloatAfterCast(), and printPretty().
|
inline |
|
inline |
Definition at line 268 of file APValue.h.
References isVector().
Referenced by APValue(), dump(), EvalAndBitcastToAPInt(), EvaluateVector(), GetValueRange(), IsSameFloatAfterCast(), printPretty(), and clang::CodeGen::ConstantEmitter::tryEmitPrivate().
|
inline |
Definition at line 281 of file APValue.h.
References getArrayInitializedElts(), and getArraySize().
Referenced by EvaluateVector(), and getArrayFiller().
bool APValue::hasLValuePath | ( | ) | const |
Definition at line 568 of file APValue.cpp.
References isLValue().
Referenced by addOrSubLValueAsInteger(), APValue(), getLValueOffset(), getLValuePath(), and printPretty().
|
inline |
Definition at line 193 of file APValue.h.
References AddrLabelDiff, dump(), getAsString(), and printPretty().
Referenced by getAddrLabelDiffLHS(), and getAddrLabelDiffRHS().
|
inline |
Definition at line 189 of file APValue.h.
References Array.
Referenced by CheckConstantExpression(), EvaluateVector(), getArrayFiller(), getArrayInitializedElts(), and getArraySize().
|
inline |
Definition at line 186 of file APValue.h.
References ComplexFloat.
Referenced by getComplexFloatImag(), getComplexFloatReal(), and IsSameFloatAfterCast().
|
inline |
Definition at line 185 of file APValue.h.
References ComplexInt.
Referenced by getComplexIntImag(), getComplexIntReal(), and GetValueRange().
|
inline |
Definition at line 184 of file APValue.h.
References Float.
Referenced by clang::CodeGen::CodeGenFunction::EmitBuiltinExpr(), EvalAndBitcastToAPInt(), getFloat(), clang::StandardConversionSequence::getNarrowingKind(), IsSameFloatAfterCast(), and setFloat().
|
inline |
Definition at line 183 of file APValue.h.
References Int.
Referenced by addOrSubLValueAsInteger(), CheckConvertedConstantExpression(), CheckEvalInICE(), clang::CodeGen::CodeGenFunction::EmitBuiltinExpr(), EvalAndBitcastToAPInt(), EvaluateCPlusPlus11IntegralConstantExpr(), EvaluateInteger(), EvaluatePointer(), GetAlignOfExpr(), getInt(), GetValueRange(), shouldAddCase(), and truncateBitfieldValue().
|
inline |
Definition at line 187 of file APValue.h.
References LValue.
Referenced by addOrSubLValueAsInteger(), EvaluateVector(), getLValueBase(), getLValueCallIndex(), getLValueOffset(), getLValuePath(), hasLValuePath(), isLValueOnePastTheEnd(), isNullPointer(), setLValue(), and truncateBitfieldValue().
bool APValue::isLValueOnePastTheEnd | ( | ) | const |
Definition at line 558 of file APValue.cpp.
References isLValue().
Referenced by APValue(), and getLValueOffset().
|
inline |
Definition at line 192 of file APValue.h.
References MemberPointer.
Referenced by getMemberPointerDecl(), getMemberPointerPath(), and isMemberPointerToDerivedMember().
bool APValue::isMemberPointerToDerivedMember | ( | ) | const |
Definition at line 622 of file APValue.cpp.
References isMemberPointer().
Referenced by clang::CodeGen::CGCXXABI::getMemberPointerPathAdjustment(), and getUnionValue().
bool APValue::isNullPointer | ( | ) | const |
Definition at line 584 of file APValue.cpp.
References isLValue().
Referenced by APValue(), getLValueOffset(), and clang::CodeGen::CodeGenFunction::ShouldNullCheckClassCastValue().
|
inline |
Definition at line 190 of file APValue.h.
References Struct.
Referenced by getStructBase(), getStructField(), getStructNumBases(), and getStructNumFields().
|
inline |
Definition at line 182 of file APValue.h.
References Uninitialized.
Referenced by CheckConstantExpression(), EvaluateArray(), clang::VarDecl::evaluateValue(), getMemberPointerPath(), and operator=().
|
inline |
Definition at line 191 of file APValue.h.
References Union.
Referenced by getUnionField(), getUnionValue(), and setUnion().
|
inline |
Definition at line 188 of file APValue.h.
References Vector.
Referenced by EvalAndBitcastToAPInt(), EvaluateTemporary(), GetValueRange(), getVectorLength(), and IsSameFloatAfterCast().
bool APValue::needsCleanup | ( | ) | const |
Returns whether the object performed allocations.
If APValues are constructed via placement new, needsCleanup()
indicates whether the destructor must be called in order to correctly free all allocated memory.
Definition at line 215 of file APValue.cpp.
References AddrLabelDiff, Array, ComplexFloat, ComplexInt, Float, getComplexFloatImag(), getComplexFloatReal(), getComplexIntImag(), getComplexIntReal(), getFloat(), getInt(), getKind(), Int, LValue, MemberPointer, Struct, Uninitialized, Union, and Vector.
Referenced by clang::VarDecl::evaluateValue(), and ~APValue().
Assign by swapping from a copy of the RHS.
Definition at line 395 of file APValue.h.
References AddrLabelDiff, ComplexFloat, ComplexInt, Float, Int, isUninit(), Struct, swap(), Uninitialized, Union, and Vector.
void APValue::printPretty | ( | raw_ostream & | OS, |
ASTContext & | Ctx, | ||
QualType | Ty | ||
) | const |
Definition at line 344 of file APValue.cpp.
References ComplexFloat, ComplexInt, Float, GetApproxValue(), clang::Type::getAs(), getComplexFloatImag(), getComplexFloatReal(), getComplexIntImag(), getComplexIntReal(), getFloat(), getInt(), getKind(), getLValueBase(), getLValueOffset(), clang::QualType::getNonReferenceType(), clang::Type::getPointeeType(), getVectorElt(), getVectorLength(), hasLValuePath(), Int, clang::Type::isBooleanType(), clang::QualType::isNull(), clang::Type::isReferenceType(), LValue, printPretty(), Uninitialized, and Vector.
Referenced by describeCall(), getAsString(), isAddrLabelDiff(), and printPretty().
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
void APValue::setLValue | ( | LValueBase | B, |
const CharUnits & | O, | ||
NoLValuePath | , | ||
unsigned | CallIndex, | ||
bool | IsNullPtr | ||
) |
Definition at line 589 of file APValue.cpp.
References isLValue(), and clang::APValue::LV::resizePath().
Referenced by APValue().
void APValue::setLValue | ( | LValueBase | B, |
const CharUnits & | O, | ||
ArrayRef< LValuePathEntry > | Path, | ||
bool | OnePastTheEnd, | ||
unsigned | CallIndex, | ||
bool | IsNullPtr | ||
) |
Definition at line 601 of file APValue.cpp.
References clang::APValue::LV::getPath(), isLValue(), and clang::APValue::LV::resizePath().
|
inline |
void APValue::swap | ( | APValue & | RHS | ) |
Swaps the contents of this and the given APValue.
Definition at line 250 of file APValue.cpp.
Referenced by APValue(), isOnePastTheEndOfCompleteObject(), operator=(), and ~APValue().