A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/Pointer_8cpp_source.html below:

clang: lib/AST/ByteCode/Pointer.cpp Source File

22using namespace clang

;

26

:

Pointer

(Pointee, Pointee->getDescriptor()->getMetadataSize(),

27

Pointee->getDescriptor()->getMetadataSize()) {}

30

:

Pointer

(Pointee, BaseAndOffset, BaseAndOffset) {}

33

: Offset(

P

.Offset), PointeeStorage(

P

.PointeeStorage),

34

StorageKind(

P

.StorageKind) {

37

PointeeStorage.BS.Pointee->addPointer(

this

);

42

assert((

Base

== RootPtrMark ||

Base

%

alignof

(

void

*) == 0) &&

"wrong base"

);

44

PointeeStorage.BS = {Pointee,

Base

};

47

Pointee->addPointer(

this

);

51

: Offset(

P

.Offset), PointeeStorage(

P

.PointeeStorage),

52

StorageKind(

P

.StorageKind) {

55

PointeeStorage.BS.Pointee->replacePointer(&

P

,

this

);

62 if

(

Block

*Pointee = PointeeStorage.BS.Pointee) {

63

Pointee->removePointer(

this

);

64

PointeeStorage.BS.Pointee =

nullptr

;

73 if

(

P

.isBlockPointer() && this->block() ==

P

.block()) {

75

PointeeStorage.BS.Base =

P

.PointeeStorage.BS.Base;

79 if

(

Block

*Pointee = PointeeStorage.BS.Pointee) {

80

Pointee->removePointer(

this

);

81

PointeeStorage.BS.Pointee =

nullptr

;

86

StorageKind =

P

.StorageKind;

89 if

(

P

.isBlockPointer()) {

90

PointeeStorage.BS =

P

.PointeeStorage.BS;

91

PointeeStorage.BS.Pointee =

P

.PointeeStorage.BS.Pointee;

93 if

(PointeeStorage.BS.Pointee)

94

PointeeStorage.BS.Pointee->addPointer(

this

);

95

}

else if

(

P

.isIntegralPointer()) {

96

PointeeStorage.Int =

P

.PointeeStorage.Int;

97

}

else if

(

P

.isFunctionPointer()) {

98

PointeeStorage.Fn =

P

.PointeeStorage.Fn;

99

}

else if

(

P

.isTypeidPointer()) {

100

PointeeStorage.Typeid =

P

.PointeeStorage.Typeid;

102

assert(

false

&&

"Unhandled storage kind"

);

110 if

(

P

.isBlockPointer() && this->block() ==

P

.block()) {

112

PointeeStorage.BS.Base =

P

.PointeeStorage.BS.Base;

116 if

(

Block

*Pointee = PointeeStorage.BS.Pointee) {

117

assert(

P

.block() != this->block());

118

Pointee->removePointer(

this

);

119

PointeeStorage.BS.Pointee =

nullptr

;

124

StorageKind =

P

.StorageKind;

127 if

(

P

.isBlockPointer()) {

128

PointeeStorage.BS =

P

.PointeeStorage.BS;

129

PointeeStorage.BS.Pointee =

P

.PointeeStorage.BS.Pointee;

131 if

(PointeeStorage.BS.Pointee)

132

PointeeStorage.BS.Pointee->addPointer(

this

);

133

}

else if

(

P

.isIntegralPointer()) {

134

PointeeStorage.Int =

P

.PointeeStorage.Int;

135

}

else if

(

P

.isFunctionPointer()) {

136

PointeeStorage.Fn =

P

.PointeeStorage.Fn;

137

}

else if

(

P

.isTypeidPointer()) {

138

PointeeStorage.Typeid =

P

.PointeeStorage.Typeid;

140

assert(

false

&&

"Unhandled storage kind"

);

151 return APValue

(

static_cast<const Expr

*

>

(

nullptr

),

171 else if

(

const auto

*

E

= Desc->

asExpr

()) {

173 if

(

const auto

*NewExpr = dyn_cast<CXXNewExpr>(

E

)) {

175 if

(NewExpr->isArray()) {

183

AllocatedType = NewExpr->getAllocatedType();

187 static int

ReportedDynamicAllocs = 0;

194

llvm_unreachable(

"Invalid allocation type"

);

205 if

(FD->getParent()->isInvalidDecl())

208 unsigned

FieldIndex = FD->getFieldIndex();

212 bool

UsePath =

true

;

233 const auto

*Dcl = Desc->

asDecl

();

236 if

(

const auto

*FD = dyn_cast_if_present<FieldDecl>(Dcl))

257 bool

IsVirtual =

false

;

260 if

(

const auto

*BaseOrMember = Desc->

asDecl

()) {

261 if

(

const auto

*FD = dyn_cast<FieldDecl>(BaseOrMember)) {

264

}

else if

(

const auto

*RD = dyn_cast<CXXRecordDecl>(BaseOrMember)) {

270

cast<CXXRecordDecl>(BaseRecord->

getDecl

()));

282

llvm_unreachable(

"Invalid field type"

);

290

std::reverse(

Path

.begin(),

Path

.end());

300 switch

(StorageKind) {

302 const Block

*B = PointeeStorage.BS.Pointee;

303

OS <<

"(Block) "

<< B <<

" {"

;

306

OS <<

"rootptr("

<< PointeeStorage.BS.Base <<

"), "

;

308

OS << PointeeStorage.BS.Base <<

", "

;

313

OS << Offset <<

", "

;

323

OS << PointeeStorage.Int.Value <<

" + "

<< Offset <<

", " 324

<< PointeeStorage.Int.Desc;

356

assert(PointeeStorage.BS.Pointee &&

357 "Cannot check if null pointer was initialized"

);

361 if

(

isStatic

() && PointeeStorage.BS.Base == 0)

372 return

IM->second->isElementInitialized(

getIndex

());

386

assert(PointeeStorage.BS.Pointee &&

"Cannot initialize null pointer"

);

399 if

(

isStatic

() && PointeeStorage.BS.Base == 0)

409

std::make_pair(

false

, std::make_shared<InitMap>(Desc->

getNumElems

()));

417 if

(IM->second->initializeElement(

getIndex

())) {

425

assert(PointeeStorage.BS.Base != 0 &&

426 "Only composite fields can be initialised"

);

432

assert(PointeeStorage.BS.Base != 0 &&

433 "Only composite fields can be activated"

);

437 if

(!getInlineDesc()->InUnion)

445

UnionPtr = UnionPtr.

getBase

();

448 for

(

const

Record::Field &F : UnionRecord->

fields

()) {

450 if

(FieldPtr == *

this

) {

452

FieldPtr.getInlineDesc()->

IsActive

=

false

;

460

B.getInlineDesc()->

IsActive

=

true

;

485 if

(A.StorageKind != B.StorageKind)

499

A.PointeeStorage.

BS

.

Base

== B.PointeeStorage.

BS

.

Base

&&

511 return E

&& !isa<MaterializeTemporaryExpr, StringLiteral>(

E

);

516 const ASTContext

&ASTCtx = Ctx.getASTContext();

517

assert(!ResultType.

isNull

());

520

Composite = [&Composite, &Ctx, &ASTCtx](

QualType

Ty,

const Pointer

&Ptr,

522 if

(

const auto

*AT = Ty->getAs<

AtomicType

>())

523

Ty = AT->getValueType();

526 if

(Ptr.isDummy() || !Ptr.isLive() || !Ptr.isBlockPointer() ||

531 if

(std::optional<PrimType>

T

= Ctx.classify(Ty)) {

536 if

(

const auto

*RT = Ty->getAs<

RecordType

>()) {

537 const auto

*

Record

= Ptr.getRecord();

538

assert(

Record

&&

"Missing record descriptor"

);

541 if

(RT->getDecl()->isUnion()) {

546 QualType

FieldTy = F.Decl->getType();

548 if

(std::optional<PrimType>

T

= Ctx.classify(FieldTy)) {

551 Ok

&= Composite(FieldTy, FP,

Value

);

565 for

(

unsigned

I = 0; I < NF; ++I) {

567 QualType

FieldTy = FD->Decl->getType();

571 if

(std::optional<PrimType>

T

= Ctx.classify(FieldTy)) {

574 Ok

&= Composite(FieldTy, FP,

Value

);

578 for

(

unsigned

I = 0; I < NB; ++I) {

582 Ok

&= Composite(BaseTy, BP, R.getStructBase(I));

585 for

(

unsigned

I = 0; I < NV; ++I) {

589 Ok

&= Composite(VirtBaseTy, VP, R.getStructBase(NB + I));

595 if

(Ty->isIncompleteArrayType()) {

600 if

(

const auto

*AT = Ty->getAsArrayTypeUnsafe()) {

601 const size_t

NumElems = Ptr.getNumElems();

602 QualType

ElemTy = AT->getElementType();

606 for

(

unsigned

I = 0; I < NumElems; ++I) {

609 if

(std::optional<PrimType>

T

= Ctx.classify(ElemTy)) {

612 Ok

&= Composite(ElemTy, EP.

narrow

(), Slot);

619 if

(

const auto

*CT = Ty->getAs<

ComplexType

>()) {

620 QualType

ElemTy = CT->getElementType();

623

std::optional<PrimType> ElemT = Ctx.classify(ElemTy);

626 auto

V1 = Ptr.atIndex(0).deref<T>();

627 auto

V2 = Ptr.atIndex(1).deref<T>();

628

R =

APValue

(V1.toAPSInt(), V2.toAPSInt());

640 if

(

const auto

*VT = Ty->getAs<

VectorType

>()) {

641

assert(Ptr.getFieldDesc()->isPrimitiveArray());

642 QualType

ElemTy = VT->getElementType();

643 PrimType

ElemT = *Ctx.classify(ElemTy);

646

Values.reserve(VT->getNumElements());

647 for

(

unsigned

I = 0; I != VT->getNumElements(); ++I) {

649

Values.push_back(Ptr.atIndex(I).deref<

T

>().toAPValue(ASTCtx));

653

assert(Values.size() == VT->getNumElements());

654

R =

APValue

(Values.data(), Values.size());

658

llvm_unreachable(

"invalid value to return"

);

670 if

(std::optional<PrimType>

T

= Ctx.classify(ResultType)) {

676 if

(!Composite(ResultType, *

this

,

Result

))

682 unsigned

Offset)

const

{

689 const

Record::Field *F =

nullptr

;

690 for

(

auto

&It : R->

fields

()) {

691 if

(It.Offset == Offset) {

702

uint64_t FieldOffset =

709 unsigned

BaseOffset)

const

{

715 for

(

const

Record::Base &B : R->

bases

()) {

716 if

(B.Offset == BaseOffset) {

Defines the clang::Expr interface and subclasses for C++ expressions.

#define INT_TYPE_SWITCH(Expr, B)

#define TYPE_SWITCH(Expr, B)

static uint64_t getFieldOffset(const ASTContext &C, const FieldDecl *FD)

static LValueBase getTypeInfo(TypeInfoLValue LV, QualType TypeInfo)

static LValueBase getDynamicAlloc(DynamicAllocLValue LV, QualType Type)

A non-discriminated union of a base, field, or array index.

static LValuePathEntry ArrayIndex(uint64_t Index)

APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat],...

APValue & getArrayInitializedElt(unsigned I)

std::string getAsString(const ASTContext &Ctx, QualType Ty) const

Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...

QualType getRecordType(const RecordDecl *Decl) const

const ASTRecordLayout & getASTRecordLayout(const RecordDecl *D) const

Get or compute information about the layout of the specified record (struct/union/class) D,...

QualType getConstantArrayType(QualType EltTy, const llvm::APInt &ArySize, const Expr *SizeExpr, ArraySizeModifier ASM, unsigned IndexTypeQuals) const

Return the unique reference to the type for a constant array of the specified element type.

CharUnits getTypeSizeInChars(QualType T) const

Return the size of the specified (complete) type T, in characters.

CharUnits toCharUnitsFromBits(int64_t BitSize) const

Convert a size in bits to a size in characters.

ASTRecordLayout - This class contains layout information for one RecordDecl, which is a struct/union/...

uint64_t getFieldOffset(unsigned FieldNo) const

getFieldOffset - Get the offset of the given field index, in bits.

CharUnits getBaseClassOffset(const CXXRecordDecl *Base) const

getBaseClassOffset - Get the offset, in chars, for the given base class.

CharUnits getVBaseClassOffset(const CXXRecordDecl *VBase) const

getVBaseClassOffset - Get the offset, in chars, for the given base class.

CharUnits - This is an opaque type for sizes expressed in character units.

QuantityType getQuantity() const

getQuantity - Get the raw integer representation of this quantity.

static CharUnits fromQuantity(QuantityType Quantity)

fromQuantity - Construct a CharUnits quantity from a raw integer type.

static CharUnits Zero()

Zero - Construct a CharUnits quantity of zero.

Complex values, per C99 6.2.5p11.

Symbolic representation of a dynamic allocation.

This represents one expression.

Represents a member of a struct/union/class.

unsigned getFieldIndex() const

Returns the index of this field within its record, as appropriate for passing to ASTRecordLayout::get...

const RecordDecl * getParent() const

Returns the parent of this field declaration, which is the struct in which this field is defined.

A (possibly-)qualified type.

bool isNull() const

Return true if this QualType doesn't point to a type yet.

A helper class that allows the use of isa/cast/dyncast to detect TagType objects of structs/unions/cl...

Symbolic representation of typeid(T) for some type T.

bool isIntegerType() const

isIntegerType() does not include complex integers (a GCC extension).

bool isLValueReferenceType() const

bool isFloatingType() const

Represents a GCC generic vector type.

A memory block, either on the stack or in the heap.

unsigned getSize() const

Returns the size of the block.

const Descriptor * getDescriptor() const

Returns the block's descriptor.

std::byte * rawData()

Returns a pointer to the raw data, including metadata.

Holds all information required to evaluate constexpr code in a module.

const APFloat & getAPFloat() const

const Function * getFunction() const

APValue toAPValue(const ASTContext &) const

A pointer to a memory block, live or dead.

static bool hasSameBase(const Pointer &A, const Pointer &B)

Checks if two pointers are comparable.

Pointer narrow() const

Restricts the scope of an array element pointer.

void deactivate() const

Deactivates an entire strurcutre.

bool isInitialized() const

Checks if an object was initialized.

bool isStatic() const

Checks if the storage is static.

bool isDynamic() const

Checks if the storage has been dynamically allocated.

Pointer atIndex(uint64_t Idx) const

Offsets a pointer inside an array.

bool isDummy() const

Checks if the pointer points to a dummy value.

void print(llvm::raw_ostream &OS) const

Prints the pointer.

int64_t getIndex() const

Returns the index into an array.

bool isActive() const

Checks if the object is active.

Pointer atField(unsigned Off) const

Creates a pointer to a field.

T & deref() const

Dereferences the pointer, if it's live.

DeclTy getSource() const

Returns the expression or declaration the pointer has been created for.

unsigned getNumElems() const

Returns the number of elements.

Pointer getArray() const

Returns the parent array.

bool isUnknownSizeArray() const

Checks if the structure is an array of unknown size.

void activate() const

Activats a field.

void operator=(const Pointer &P)

bool isIntegralPointer() const

QualType getType() const

Returns the type of the innermost field.

bool isArrayElement() const

Checks if the pointer points to an array.

bool isArrayRoot() const

Whether this array refers to an array, but not to the first element.

bool isLive() const

Checks if the pointer is live.

bool pointsToLiteral() const

Whether this points to a block that's been created for a "literal lvalue", i.e.

Pointer getBase() const

Returns a pointer to the object of which this pointer is a field.

bool isTypeidPointer() const

std::string toDiagnosticString(const ASTContext &Ctx) const

Converts the pointer to a string usable in diagnostics.

bool isZero() const

Checks if the pointer is null.

const IntPointer & asIntPointer() const

bool isRoot() const

Pointer points directly to a block.

const Descriptor * getDeclDesc() const

Accessor for information about the declaration site.

static bool pointToSameBlock(const Pointer &A, const Pointer &B)

Checks if both given pointers point to the same block.

APValue toAPValue(const ASTContext &ASTCtx) const

Converts the pointer to an APValue.

bool isOnePastEnd() const

Checks if the index is one past end.

static bool hasSameArray(const Pointer &A, const Pointer &B)

Checks if two pointers can be subtracted.

bool isPastEnd() const

Checks if the pointer points past the end of the object.

Pointer expand() const

Expands a pointer to the containing array, undoing narrowing.

bool isElementPastEnd() const

Checks if the pointer is an out-of-bounds element pointer.

bool isBlockPointer() const

std::optional< APValue > toRValue(const Context &Ctx, QualType ResultType) const

Converts the pointer to an APValue that is an rvalue.

const FunctionPointer & asFunctionPointer() const

const Block * block() const

bool isFunctionPointer() const

const Descriptor * getFieldDesc() const

Accessors for information about the innermost field.

bool isVirtualBaseClass() const

const BlockPointer & asBlockPointer() const

void initialize() const

Initializes a field.

bool isField() const

Checks if the item is a field in an object.

const Record * getRecord() const

Returns the record descriptor of a class.

Structure/Class descriptor.

const RecordDecl * getDecl() const

Returns the underlying declaration.

unsigned getNumBases() const

const Field * getField(const FieldDecl *FD) const

Returns a field.

llvm::iterator_range< const_base_iter > bases() const

const Base * getVirtualBase(const RecordDecl *RD) const

Returns a virtual base descriptor.

unsigned getNumFields() const

unsigned getNumVirtualBases() const

llvm::iterator_range< const_field_iter > fields() const

const Base * getBase(const RecordDecl *FD) const

Returns a base descriptor.

std::optional< std::pair< bool, std::shared_ptr< InitMap > > > InitMapPtr

PrimType

Enumeration of the primitive types of the VM.

The JSON file list parser is used to communicate input to InstallAPI.

@ Result

The result type of a method or function.

const FunctionProtoType * T

unsigned Base

Start of the current subfield.

Block * Pointee

The block the pointer is pointing to.

Describes a memory block created by an allocation site.

unsigned getNumElems() const

Returns the number of elements stored in the block.

QualType getElemQualType() const

const ValueDecl * asValueDecl() const

const Decl * asDecl() const

const bool IsArray

Flag indicating if the block is an array.

bool isPrimitiveArray() const

Checks if the descriptor is of an array of primitives.

const FieldDecl * asFieldDecl() const

const Record *const ElemRecord

Pointer to the record, if block contains records.

bool isUnion() const

Checks if the descriptor is of a union.

const Expr * asExpr() const

bool isArray() const

Checks if the descriptor is of an array.

Descriptor used for global variables.

GlobalInitState InitState

unsigned IsActive

Flag indicating if the field is the active member of a union.

unsigned IsInitialized

For primitive fields, it indicates if the field was initialized.

IntPointer baseCast(const ASTContext &ASTCtx, unsigned BaseOffset) const

IntPointer atOffset(const ASTContext &ASTCtx, unsigned Offset) const


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4