A RetroSearch Logo

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

Search Query:

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

clang: lib/Serialization/ASTReaderDecl.cpp Source File

58#include "llvm/ADT/DenseMap.h" 59#include "llvm/ADT/FoldingSet.h" 60#include "llvm/ADT/STLExtras.h" 61#include "llvm/ADT/SmallPtrSet.h" 62#include "llvm/ADT/SmallVector.h" 63#include "llvm/ADT/iterator_range.h" 64#include "llvm/Bitstream/BitstreamReader.h" 65#include "llvm/Support/Casting.h" 66#include "llvm/Support/ErrorHandling.h" 67#include "llvm/Support/SaveAndRestore.h" 75using namespace clang

;

76using namespace

serialization;

84class

RedeclarableResult {

91

: MergeWith(MergeWith), FirstID(FirstID), IsKeyDecl(IsKeyDecl) {}

97 bool

isKeyDecl()

const

{

return

IsKeyDecl; }

101 Decl

*getKnownMergeTarget()

const

{

return

MergeWith; }

119 template

<

typename

T>

123 template

<

typename

T>

125

RedeclarableResult &Redecl) {

127 D

, Existing, Redecl.isKeyDecl() ? Redecl.getFirstID() :

GlobalDeclID

());

134 struct

CXXRecordDecl::DefinitionData &&NewDD);

136 struct

ObjCInterfaceDecl::DefinitionData &&NewDD);

138 struct

ObjCProtocolDecl::DefinitionData &&NewDD);

151

ASTReader::RecordLocation Loc;

157 TypeID

DeferredTypeID = 0;

158 unsigned

AnonymousDeclNumber = 0;

165 bool

IsDeclMarkedUsed =

false

;

167

uint64_t GetCurrentCursorOffset();

169

uint64_t ReadLocalOffset() {

170

uint64_t LocalOffset =

Record

.readInt();

171

assert(LocalOffset <

Loc

.Offset &&

"offset point after current record"

);

172 return

LocalOffset ?

Loc

.Offset - LocalOffset : 0;

175

uint64_t ReadGlobalOffset() {

176

uint64_t Local = ReadLocalOffset();

177 return

Local ?

Record

.getGlobalBitOffset(Local) : 0;

188

std::string readString() {

return Record

.readString(); }

190 Decl

*readDecl() {

return Record

.readDecl(); }

192 template

<

typename

T>

T

*readDeclAs() {

return Record

.readDeclAs<

T

>(); }

198 return Record

.getGlobalSubmoduleID(

Record

.readInt());

201 Module

*readModule() {

return Record

.getSubmodule(readSubmoduleID()); }

204 Decl

*LambdaContext =

nullptr

,

205 unsigned

IndexInLambdaContext = 0);

206 void

ReadCXXDefinitionData(

struct

CXXRecordDecl::DefinitionData &

Data

,

208 unsigned

IndexInLambdaContext);

209 void

ReadObjCDefinitionData(

struct

ObjCInterfaceDecl::DefinitionData &

Data

);

210 void

ReadObjCDefinitionData(

struct

ObjCProtocolDecl::DefinitionData &

Data

);

231 class

FindExistingResult {

235 bool

AddResult =

false

;

236 unsigned

AnonymousDeclNumber = 0;

240

FindExistingResult(

ASTReader

&Reader) : Reader(Reader) {}

243 unsigned

AnonymousDeclNumber,

245

: Reader(Reader), New(New), Existing(Existing), AddResult(

true

),

246

AnonymousDeclNumber(AnonymousDeclNumber),

247

TypedefNameForLinkage(TypedefNameForLinkage) {}

249

FindExistingResult(FindExistingResult &&

Other

)

250

: Reader(

Other

.Reader), New(

Other

.New), Existing(

Other

.Existing),

251

AddResult(

Other

.AddResult),

252

AnonymousDeclNumber(

Other

.AnonymousDeclNumber),

253

TypedefNameForLinkage(

Other

.TypedefNameForLinkage) {

254 Other

.AddResult =

false

;

257

FindExistingResult &operator=(FindExistingResult &&) =

delete

;

258

~FindExistingResult();

262 void

suppress() { AddResult =

false

; }

264 operator NamedDecl

*()

const

{

return

Existing; }

266 template

<

typename

T>

operator T

*()

const

{

267 return

dyn_cast_or_null<T>(Existing);

273

FindExistingResult findExisting(

NamedDecl

*

D

);

280

ThisDeclID(thisDeclID), ThisDeclLoc(ThisDeclLoc) {}

282 template

<

typename

DeclT>

287 template

<

typename

DeclT>

297 template

<

typename

DeclT>

302 template

<

typename

DeclT>

307

llvm::BitstreamCursor &DeclsCursor,

bool

IsPartial);

316

Cat->NextClassCategory = Next;

418

uint64_t &VisibleOffset, uint64_t &ModuleLocalOffset,

419

uint64_t &TULocalOffset);

421 template

<

typename

T>

424 template

<

typename

T>

428

RedeclarableResult &Redecl);

464template

<

typename

DeclT>

class

MergedRedeclIterator {

465

DeclT *Start =

nullptr

;

466

DeclT *Canonical =

nullptr

;

467

DeclT *Current =

nullptr

;

470

MergedRedeclIterator() =

default

;

471

MergedRedeclIterator(DeclT *Start) : Start(Start), Current(Start) {}

475

MergedRedeclIterator &operator++() {

476 if

(Current->isFirstDecl()) {

478

Current = Current->getMostRecentDecl();

480

Current = Current->getPreviousDecl();

486 if

(Current == Start || Current == Canonical)

491 friend bool operator!=

(

const

MergedRedeclIterator &A,

492 const

MergedRedeclIterator &B) {

493 return

A.Current != B.Current;

499template

<

typename

DeclT>

500static

llvm::iterator_range<MergedRedeclIterator<DeclT>>

502 return

llvm::make_range(MergedRedeclIterator<DeclT>(

D

),

503

MergedRedeclIterator<DeclT>());

506uint64_t

ASTDeclReader::GetCurrentCursorOffset() {

507 return

Loc.F->DeclsCursor.GetCurrentBitNo() + Loc.F->GlobalBitOffset;

512

Reader.DefinitionSource[FD] =

513

Loc.F->Kind == ModuleKind::MK_MainFile ||

516 if

(

auto

*CD = dyn_cast<CXXConstructorDecl>(FD)) {

517

CD->setNumCtorInitializers(

Record

.readInt());

518 if

(CD->getNumCtorInitializers())

519

CD->CtorInitializers = ReadGlobalOffset();

522

Reader.PendingBodies[FD] = GetCurrentCursorOffset();

531

IsDeclMarkedUsed =

false

;

533 if

(

auto

*DD = dyn_cast<DeclaratorDecl>(

D

)) {

534 if

(

auto

*TInfo = DD->getTypeSourceInfo())

535 Record

.readTypeLoc(TInfo->getTypeLoc());

538 if

(

auto

*TD = dyn_cast<TypeDecl>(

D

)) {

544 if

(NamedDeclForTagDecl.

isValid

())

545

cast<TagDecl>(

D

)->TypedefNameDeclOrQualifier =

546

cast<TypedefNameDecl>(Reader.

GetDecl

(NamedDeclForTagDecl));

547

}

else if

(

auto

*ID = dyn_cast<ObjCInterfaceDecl>(

D

)) {

550

}

else if

(

auto

*FD = dyn_cast<FunctionDecl>(

D

)) {

554

}

else if

(

auto

*VD = dyn_cast<VarDecl>(

D

)) {

556

}

else if

(

auto

*FD = dyn_cast<FieldDecl>(

D

)) {

557 if

(FD->hasInClassInitializer() &&

Record

.readInt()) {

558

FD->setLazyInClassInitializer(

LazyDeclStmtPtr

(GetCurrentCursorOffset()));

565 auto

ModuleOwnership =

569

IsDeclMarkedUsed |=

D

->Used;

572 bool

HasStandaloneLexicalDC = DeclBits.

getNextBit

();

579

isa<ParmVarDecl, ObjCTypeParamDecl>(

D

)) {

586 GlobalDeclID

SemaDCIDForTemplateParmDecl = readDeclID();

588

HasStandaloneLexicalDC ? readDeclID() :

GlobalDeclID

();

589 if

(LexicalDCIDForTemplateParmDecl.

isInvalid

())

590

LexicalDCIDForTemplateParmDecl = SemaDCIDForTemplateParmDecl;

591

Reader.addPendingDeclContextInfo(

D

,

592

SemaDCIDForTemplateParmDecl,

593

LexicalDCIDForTemplateParmDecl);

596 auto

*SemaDC = readDeclAs<DeclContext>();

598

HasStandaloneLexicalDC ? readDeclAs<DeclContext>() :

nullptr

;

604 if

(

auto

*RD = dyn_cast<CXXRecordDecl>(SemaDC))

605

MergedSemaDC = getOrFakePrimaryClassDefinition(Reader, RD);

607

MergedSemaDC = Reader.MergedDeclContexts.lookup(SemaDC);

610 D

->setDeclContextsImpl(MergedSemaDC ? MergedSemaDC : SemaDC, LexicalDC,

617 Record

.readAttributes(Attrs);

628 switch

(ModuleOwnership) {

654

Reader.HiddenNamesMap[Owner].push_back(

D

);

656

}

else if

(ModulePrivate) {

665

std::string Arg = readString();

666 memcpy

(

D

->getTrailingObjects<

char

>(), Arg.data(), Arg.size());

667 D

->getTrailingObjects<

char

>()[Arg.size()] =

'\0'

;

673

std::string Name = readString();

674 memcpy

(

D

->getTrailingObjects<

char

>(), Name.data(), Name.size());

675 D

->getTrailingObjects<

char

>()[Name.size()] =

'\0'

;

677 D

->ValueStart = Name.size() + 1;

678

std::string

Value

= readString();

679 memcpy

(

D

->getTrailingObjects<

char

>() +

D

->ValueStart,

Value

.data(),

681 D

->getTrailingObjects<

char

>()[

D

->ValueStart +

Value

.size()] =

'\0'

;

685

llvm_unreachable(

"Translation units are not serialized"

);

691

AnonymousDeclNumber =

Record

.readInt();

698

DeferredTypeID =

Record

.getGlobalTypeID(

Record

.readInt());

725 if

(

auto

*Template = readDeclAs<TypeAliasTemplateDecl>())

752 Record

.readQualifierInfo(*Info);

753

TD->TypedefNameDeclOrQualifier = Info;

757

NamedDeclForTagDecl = readDeclID();

758

TypedefNameForLinkage =

Record

.readIdentifier();

761

llvm_unreachable(

"unexpected tag info kind"

);

764 if

(!isa<CXXRecordDecl>(TD))

778

ED->setNumPositiveBits(EnumDeclBits.

getNextBits

(

8));

779

ED->setNumNegativeBits(EnumDeclBits.

getNextBits

(

8));

784

ED->setHasODRHash(

true

);

785

ED->ODRHash =

Record

.readInt();

802

Reader.MergedDeclContexts.insert(std::make_pair(ED, OldDef));

809

Reader.PendingEnumOdrMergeFailures[OldDef].push_back(ED);

815 if

(

auto

*InstED = readDeclAs<EnumDecl>()) {

818

ED->setInstantiationOfMemberEnum(Reader.

getContext

(), InstED, TSK);

847

RD->setODRHash(

Record

.readInt());

853 RecordDecl

*&OldDef = Reader.RecordDefinitions[Canon];

865

Reader.MergedDeclContexts.insert(std::make_pair(RD, OldDef));

869

Reader.PendingRecordOdrMergeFailures[OldDef].push_back(RD);

881 if

(isa<FunctionDecl, VarDecl>(VD))

882

DeferredTypeID =

Record

.getGlobalTypeID(

Record

.readInt());

899 auto

*Info =

new

(Reader.

getContext

()) DeclaratorDecl::ExtInfo();

900 Record

.readQualifierInfo(*Info);

901

Info->TrailingRequiresClause =

Record

.readExpr();

906

TSIType.

isNull

() ? nullptr

922 auto

*Template = readDeclAs<FunctionTemplateDecl>();

928 auto

*InstFD = readDeclAs<FunctionDecl>();

931

FD->setInstantiationOfMemberFunction(Reader.

getContext

(), InstFD, TSK);

936 auto

*Template = readDeclAs<FunctionTemplateDecl>();

941 Record

.readTemplateArgumentList(TemplArgs,

true

);

945 bool

HasTemplateArgumentsAsWritten =

Record

.readBool();

946 if

(HasTemplateArgumentsAsWritten)

947 Record

.readTemplateArgumentListInfo(TemplArgsWritten);

957 auto

*FD = readDeclAs<FunctionDecl>();

967 C

, FD, Template, TSK, TemplArgList,

968

HasTemplateArgumentsAsWritten ? &TemplArgsWritten :

nullptr

, POI,

970

FD->TemplateOrSpecialization = FTInfo;

975 auto

*CanonTemplate = readDeclAs<FunctionTemplateDecl>();

981

llvm::FoldingSetNodeID ID;

983 void

*InsertPos =

nullptr

;

991 "already deserialized this template specialization"

);

1000 unsigned

NumCandidates =

Record

.readInt();

1001 while

(NumCandidates--)

1002

Candidates.

addDecl

(readDeclAs<NamedDecl>());

1006 bool

HasTemplateArgumentsAsWritten =

Record

.readBool();

1007 if

(HasTemplateArgumentsAsWritten)

1008 Record

.readTemplateArgumentListInfo(TemplArgsWritten);

1012

HasTemplateArgumentsAsWritten ? &TemplArgsWritten :

nullptr

);

1031

Reader.PendingDeducedFunctionTypes.push_back({FD, DeferredTypeID});

1053 const bool

Pure = FunctionDeclBits.

getNextBit

();

1071

FD->EndRangeLoc = readSourceLocation();

1075

FD->ODRHash =

Record

.readInt();

1076

FD->setHasODRHash(

true

);

1082 if

(

auto

Info =

Record

.readInt()) {

1083 bool

HasMessage = Info & 2;

1085

HasMessage ? cast<StringLiteral>(

Record

.readExpr()) :

nullptr

;

1087 unsigned

NumLookups =

Record

.readInt();

1089 for

(

unsigned

I = 0; I != NumLookups; ++I) {

1097

Reader.

getContext

(), Lookups, DeletedMessage));

1108 auto

merge = [

this

, &Redecl, FD](

auto

&&F) {

1109 auto

*Existing = cast_or_null<FunctionDecl>(Redecl.getKnownMergeTarget());

1110

RedeclarableResult NewRedecl(Existing ? F(Existing) :

nullptr

,

1111

Redecl.getFirstID(), Redecl.isKeyDecl());

1129 unsigned

NumParams =

Record

.readInt();

1131

Params.reserve(NumParams);

1132 for

(

unsigned

I = 0; I != NumParams; ++I)

1133

Params.push_back(readDeclAs<ParmVarDecl>());

1134

FD->setParams(Reader.

getContext

(), Params);

1139 if

(FD->

hasAttr

<SYCLKernelEntryPointAttr>()) {

1140 auto

*SKEPAttr = FD->

getAttr

<SYCLKernelEntryPointAttr>();

1142 const SYCLKernelInfo

*SKI =

C

.findSYCLKernelInfo(SKEPAttr->getKernelName());

1145

Reader.

Diag

(FD->

getLocation

(), diag::err_sycl_kernel_name_conflict);

1147

diag::note_previous_declaration);

1148

SKEPAttr->setInvalidAttr();

1151 C

.registerSYCLEntryPointFunction(FD);

1158 if

(

Record

.readInt()) {

1161

Reader.PendingBodies[MD] = GetCurrentCursorOffset();

1163

MD->

setSelfDecl

(readDeclAs<ImplicitParamDecl>());

1164

MD->

setCmdDecl

(readDeclAs<ImplicitParamDecl>());

1177

readDeclAs<ObjCMethodDecl>());

1185

MD->DeclEndLoc = readSourceLocation();

1186 unsigned

NumParams =

Record

.readInt();

1188

Params.reserve(NumParams);

1189 for

(

unsigned

I = 0; I != NumParams; ++I)

1190

Params.push_back(readDeclAs<ParmVarDecl>());

1193 unsigned

NumStoredSelLocs =

Record

.readInt();

1195

SelLocs.reserve(NumStoredSelLocs);

1196 for

(

unsigned

i = 0; i != NumStoredSelLocs; ++i)

1197

SelLocs.push_back(readSourceLocation());

1199

MD->setParamsAndSelLocs(Reader.

getContext

(), Params, SelLocs);

1205 D

->Variance =

Record

.readInt();

1206 D

->Index =

Record

.readInt();

1207 D

->VarianceLoc = readSourceLocation();

1208 D

->ColonLoc = readSourceLocation();

1218 unsigned

numParams =

Record

.readInt();

1223

typeParams.reserve(numParams);

1224 for

(

unsigned

i = 0; i != numParams; ++i) {

1225 auto

*typeParam = readDeclAs<ObjCTypeParamDecl>();

1229

typeParams.push_back(typeParam);

1236

typeParams, rAngleLoc);

1239void

ASTDeclReader::ReadObjCDefinitionData(

1240 struct

ObjCInterfaceDecl::DefinitionData &

Data

) {

1242 Data

.SuperClassTInfo = readTypeSourceInfo();

1244 Data

.EndLoc = readSourceLocation();

1245 Data

.HasDesignatedInitializers =

Record

.readInt();

1247 Data

.HasODRHash =

true

;

1250 unsigned

NumProtocols =

Record

.readInt();

1252

Protocols.reserve(NumProtocols);

1253 for

(

unsigned

I = 0; I != NumProtocols; ++I)

1254

Protocols.push_back(readDeclAs<ObjCProtocolDecl>());

1256

ProtoLocs.reserve(NumProtocols);

1257 for

(

unsigned

I = 0; I != NumProtocols; ++I)

1258

ProtoLocs.push_back(readSourceLocation());

1259 Data

.ReferencedProtocols.set(Protocols.data(), NumProtocols, ProtoLocs.data(),

1263

NumProtocols =

Record

.readInt();

1265

Protocols.reserve(NumProtocols);

1266 for

(

unsigned

I = 0; I != NumProtocols; ++I)

1267

Protocols.push_back(readDeclAs<ObjCProtocolDecl>());

1268 Data

.AllReferencedProtocols.set(Protocols.data(), NumProtocols,

1274 struct

ObjCInterfaceDecl::DefinitionData &DD =

D

->data();

1275 if

(DD.Definition == NewDD.Definition)

1278

Reader.MergedDeclContexts.insert(

1279

std::make_pair(NewDD.Definition, DD.Definition));

1282 if

(

D

->getODRHash() != NewDD.ODRHash)

1283

Reader.PendingObjCInterfaceOdrMergeFailures[DD.Definition].push_back(

1284

{NewDD.Definition, &NewDD});

1290

DeferredTypeID =

Record

.getGlobalTypeID(

Record

.readInt());

1294 if

(

Record

.readInt()) {

1296 ID

->allocateDefinitionData();

1298

ReadObjCDefinitionData(

ID

->data());

1300 if

(Canon->Data.getPointer()) {

1304 ID

->Data = Canon->Data;

1308 ID

->getCanonicalDecl()->Data =

ID

->Data;

1311 ID

->setIvarList(

nullptr

);

1315

Reader.PendingDefinitions.insert(

ID

);

1318

Reader.ObjCClassesLoaded.push_back(

ID

);

1320 ID

->Data =

ID

->getCanonicalDecl()->Data;

1329 bool

synth =

Record

.readInt();

1344 if

(PrevIvar && PrevIvar != IVD) {

1345 auto

*ParentExt = dyn_cast<ObjCCategoryDecl>(IVD->

getDeclContext

());

1346 auto

*PrevParentExt =

1348 if

(ParentExt && PrevParentExt) {

1352

.PendingObjCExtensionIvarRedeclarations[std::make_pair(ParentExt,

1354

.push_back(std::make_pair(IVD, PrevIvar));

1355

}

else if

(ParentExt || PrevParentExt) {

1359

Reader.

Diag

(IVD->

getLocation

(), diag::err_duplicate_ivar_declaration)

1361

Reader.

Diag

(PrevIvar->

getLocation

(), diag::note_previous_definition);

1366void

ASTDeclReader::ReadObjCDefinitionData(

1367 struct

ObjCProtocolDecl::DefinitionData &

Data

) {

1368 unsigned

NumProtoRefs =

Record

.readInt();

1370

ProtoRefs.reserve(NumProtoRefs);

1371 for

(

unsigned

I = 0; I != NumProtoRefs; ++I)

1372

ProtoRefs.push_back(readDeclAs<ObjCProtocolDecl>());

1374

ProtoLocs.reserve(NumProtoRefs);

1375 for

(

unsigned

I = 0; I != NumProtoRefs; ++I)

1376

ProtoLocs.push_back(readSourceLocation());

1377 Data

.ReferencedProtocols.set(ProtoRefs.data(), NumProtoRefs,

1380 Data

.HasODRHash =

true

;

1385 struct

ObjCProtocolDecl::DefinitionData &DD =

D

->data();

1386 if

(DD.Definition == NewDD.Definition)

1389

Reader.MergedDeclContexts.insert(

1390

std::make_pair(NewDD.Definition, DD.Definition));

1393 if

(

D

->getODRHash() != NewDD.ODRHash)

1394

Reader.PendingObjCProtocolOdrMergeFailures[DD.Definition].push_back(

1395

{NewDD.Definition, &NewDD});

1403 if

(

Record

.readInt()) {

1405

PD->allocateDefinitionData();

1407

ReadObjCDefinitionData(PD->data());

1410 if

(Canon->Data.getPointer()) {

1414

PD->Data = Canon->Data;

1421

Reader.PendingDefinitions.insert(PD);

1440

Reader.CategoriesDeserialized.insert(CD);

1442

CD->ClassInterface = readDeclAs<ObjCInterfaceDecl>();

1444 unsigned

NumProtoRefs =

Record

.readInt();

1446

ProtoRefs.reserve(NumProtoRefs);

1447 for

(

unsigned

I = 0; I != NumProtoRefs; ++I)

1448

ProtoRefs.push_back(readDeclAs<ObjCProtocolDecl>());

1450

ProtoLocs.reserve(NumProtoRefs);

1451 for

(

unsigned

I = 0; I != NumProtoRefs; ++I)

1452

ProtoLocs.push_back(readSourceLocation());

1453

CD->

setProtocolList

(ProtoRefs.data(), NumProtoRefs, ProtoLocs.data(),

1470 D

->setAtLoc(readSourceLocation());

1471 D

->setLParenLoc(readSourceLocation());

1474 D

->setType(

T

, TSI);

1476 D

->setPropertyAttributesAsWritten(

1478 D

->setPropertyImplementation(

1486 D

->setGetterMethodDecl(readDeclAs<ObjCMethodDecl>());

1487 D

->setSetterMethodDecl(readDeclAs<ObjCMethodDecl>());

1488 D

->setPropertyIvarDecl(readDeclAs<ObjCIvarDecl>());

1493 D

->setClassInterface(readDeclAs<ObjCInterfaceDecl>());

1498 D

->CategoryNameLoc = readSourceLocation();

1503 D

->setSuperClass(readDeclAs<ObjCInterfaceDecl>());

1504 D

->SuperLoc = readSourceLocation();

1505 D

->setIvarLBraceLoc(readSourceLocation());

1506 D

->setIvarRBraceLoc(readSourceLocation());

1507 D

->setHasNonZeroConstructors(

Record

.readInt());

1508 D

->setHasDestructors(

Record

.readInt());

1509 D

->NumIvarInitializers =

Record

.readInt();

1510 if

(

D

->NumIvarInitializers)

1511 D

->IvarInitializers = ReadGlobalOffset();

1516 D

->setAtLoc(readSourceLocation());

1517 D

->setPropertyDecl(readDeclAs<ObjCPropertyDecl>());

1518 D

->PropertyIvarDecl = readDeclAs<ObjCIvarDecl>();

1519 D

->IvarLoc = readSourceLocation();

1520 D

->setGetterMethodDecl(readDeclAs<ObjCMethodDecl>());

1521 D

->setSetterMethodDecl(readDeclAs<ObjCMethodDecl>());

1522 D

->setGetterCXXConstructor(

Record

.readExpr());

1523 D

->setSetterCXXAssignment(

Record

.readExpr());

1528

FD->Mutable =

Record

.readInt();

1530 unsigned

Bits =

Record

.readInt();

1531

FD->StorageKind = Bits >> 1;

1532 if

(FD->StorageKind == FieldDecl::ISK_CapturedVLAType)

1534

cast<VariableArrayType>(

Record

.readType().getTypePtr());

1540 if

(

auto

*Tmpl = readDeclAs<FieldDecl>())

1548

PD->GetterId =

Record

.readIdentifier();

1549

PD->SetterId =

Record

.readIdentifier();

1554 D

->PartVal.Part1 =

Record

.readInt();

1555 D

->PartVal.Part2 =

Record

.readInt();

1556 D

->PartVal.Part3 =

Record

.readInt();

1557 for

(

auto

&

C

:

D

->PartVal.Part4And5)

1568 D

->Value =

Record

.readAPValue();

1572

Reader.

getContext

().UnnamedGlobalConstantDecls.GetOrInsertNode(

D

))

1578 D

->Value =

Record

.readAPValue();

1583

Reader.

getContext

().TemplateParamObjectDecls.GetOrInsertNode(

D

))

1590

FD->ChainingSize =

Record

.readInt();

1591

assert(FD->ChainingSize >= 2 &&

"Anonymous chaining must be >= 2"

);

1594 for

(

unsigned

I = 0; I != FD->ChainingSize; ++I)

1595

FD->Chaining[I] = readDeclAs<NamedDecl>();

1606 bool

DefGeneratedInModule = VarDeclBits.

getNextBit

();

1611 bool

HasDeducedType =

false

;

1612 if

(!isa<ParmVarDecl>(VD)) {

1638

Reader.PendingDeducedVarTypes.push_back({VD, DeferredTypeID});

1650 if

(DefGeneratedInModule) {

1651

Reader.DefinitionSource[VD] =

1652 Loc

.F->Kind == ModuleKind::MK_MainFile ||

1656 if

(VD->

hasAttr

<BlocksAttr>()) {

1663

VarNotTemplate = 0, VarTemplate, StaticDataMemberSpecialization

1665 switch

((VarKind)

Record

.readInt()) {

1666 case

VarNotTemplate:

1669 if

(!isa<ParmVarDecl>(VD) && !isa<ImplicitParamDecl>(VD) &&

1670

!isa<VarTemplateSpecializationDecl>(VD))

1677 case

StaticDataMemberSpecialization: {

1678 auto

*Tmpl = readDeclAs<VarDecl>();

1691 if

(uint64_t Val =

Record

.readInt()) {

1705

Eval->

Value

= GetCurrentCursorOffset();

1716 unsigned

scopeIndex =

Record

.readInt();

1718 unsigned

isObjCMethodParam = ParmVarDeclBits.

getNextBit

();

1719 unsigned

scopeDepth = ParmVarDeclBits.

getNextBits

(

7);

1720 unsigned

declQualifier = ParmVarDeclBits.

getNextBits

(

7);

1721 if

(isObjCMethodParam) {

1722

assert(scopeDepth == 0);

1735

PD->ExplicitObjectParameterIntroducerLoc =

Record

.readSourceLocation();

1743 auto

**BDs = DD->getTrailingObjects<

BindingDecl

*>();

1744 for

(

unsigned

I = 0; I != DD->NumBindings; ++I) {

1745

BDs[I] = readDeclAs<BindingDecl>();

1746

BDs[I]->setDecomposedDecl(DD);

1752

BD->Binding =

Record

.readExpr();

1763 D

->Statement =

Record

.readStmt();

1768

BD->

setBody

(cast_or_null<CompoundStmt>(

Record

.readStmt()));

1770 unsigned

NumParams =

Record

.readInt();

1772

Params.reserve(NumParams);

1773 for

(

unsigned

I = 0; I != NumParams; ++I)

1774

Params.push_back(readDeclAs<ParmVarDecl>());

1783 bool

capturesCXXThis =

Record

.readInt();

1784 unsigned

numCaptures =

Record

.readInt();

1786

captures.reserve(numCaptures);

1787 for

(

unsigned

i = 0; i != numCaptures; ++i) {

1788 auto

*

decl

= readDeclAs<VarDecl>();

1789 unsigned

flags =

Record

.readInt();

1790 bool

byRef = (flags & 1);

1791 bool

nested = (flags & 2);

1792 Expr

*copyExpr = ((flags & 4) ?

Record

.readExpr() :

nullptr

);

1802 for

(

unsigned

I = 0; I <

D

->NumParams; ++I)

1803 D

->setParam(I, readDeclAs<ImplicitParamDecl>());

1804 D

->setNothrow(

Record

.readInt() != 0);

1805 D

->setBody(cast_or_null<Stmt>(

Record

.readStmt()));

1810 unsigned

ContextParamPos =

Record

.readInt();

1813 for

(

unsigned

I = 0; I < CD->NumParams; ++I) {

1814 if

(I != ContextParamPos)

1815

CD->

setParam

(I, readDeclAs<ImplicitParamDecl>());

1824 D

->setExternLoc(readSourceLocation());

1825 D

->setRBraceLoc(readSourceLocation());

1830 D

->RBraceLoc = readSourceLocation();

1835 D

->setLocStart(readSourceLocation());

1845 D

->LocStart = readSourceLocation();

1846 D

->RBraceLoc = readSourceLocation();

1853 if

(Redecl.getFirstID() == ThisDeclID)

1854

AnonNamespace = readDeclID();

1858 if

(AnonNamespace.

isValid

()) {

1862 auto

*Anon = cast<NamespaceDecl>(Reader.

GetDecl

(AnonNamespace));

1863 if

(!

Record

.isModule())

1864 D

->setAnonymousNamespace(Anon);

1870

uint64_t LexicalOffset = 0;

1871

uint64_t VisibleOffset = 0;

1872

uint64_t ModuleLocalOffset = 0;

1873

uint64_t TULocalOffset = 0;

1876 D

->IsCBuffer =

Record

.readBool();

1877 D

->KwLoc = readSourceLocation();

1878 D

->LBraceLoc = readSourceLocation();

1879 D

->RBraceLoc = readSourceLocation();

1885 D

->NamespaceLoc = readSourceLocation();

1886 D

->IdentLoc = readSourceLocation();

1887 D

->QualifierLoc =

Record

.readNestedNameSpecifierLoc();

1888 D

->Namespace = readDeclAs<NamedDecl>();

1894 D

->setUsingLoc(readSourceLocation());

1895 D

->QualifierLoc =

Record

.readNestedNameSpecifierLoc();

1896 D

->DNLoc =

Record

.readDeclarationNameLoc(

D

->getDeclName());

1897 D

->FirstUsingShadow.setPointer(readDeclAs<UsingShadowDecl>());

1898 D

->setTypename(

Record

.readInt());

1899 if

(

auto

*Pattern = readDeclAs<NamedDecl>())

1906 D

->setUsingLoc(readSourceLocation());

1907 D

->setEnumLoc(readSourceLocation());

1908 D

->setEnumType(

Record

.readTypeSourceInfo());

1909 D

->FirstUsingShadow.setPointer(readDeclAs<UsingShadowDecl>());

1910 if

(

auto

*Pattern = readDeclAs<UsingEnumDecl>())

1917 D

->InstantiatedFrom = readDeclAs<NamedDecl>();

1918 auto

**Expansions =

D

->getTrailingObjects<

NamedDecl

*>();

1919 for

(

unsigned

I = 0; I !=

D

->NumExpansions; ++I)

1920

Expansions[I] = readDeclAs<NamedDecl>();

1927 D

->Underlying = readDeclAs<NamedDecl>();

1929 D

->UsingOrNextShadow = readDeclAs<NamedDecl>();

1930 auto

*Pattern = readDeclAs<UsingShadowDecl>();

1939 D

->NominatedBaseClassShadowDecl = readDeclAs<ConstructorUsingShadowDecl>();

1940 D

->ConstructedBaseClassShadowDecl = readDeclAs<ConstructorUsingShadowDecl>();

1941 D

->IsVirtual =

Record

.readInt();

1946 D

->UsingLoc = readSourceLocation();

1947 D

->NamespaceLoc = readSourceLocation();

1948 D

->QualifierLoc =

Record

.readNestedNameSpecifierLoc();

1949 D

->NominatedNamespace = readDeclAs<NamedDecl>();

1950 D

->CommonAncestor = readDeclAs<DeclContext>();

1955 D

->setUsingLoc(readSourceLocation());

1956 D

->QualifierLoc =

Record

.readNestedNameSpecifierLoc();

1957 D

->DNLoc =

Record

.readDeclarationNameLoc(

D

->getDeclName());

1958 D

->EllipsisLoc = readSourceLocation();

1965 D

->TypenameLocation = readSourceLocation();

1966 D

->QualifierLoc =

Record

.readNestedNameSpecifierLoc();

1967 D

->EllipsisLoc = readSourceLocation();

1976void

ASTDeclReader::ReadCXXDefinitionData(

1978 Decl

*LambdaContext,

unsigned

IndexInLambdaContext) {

1982#define FIELD(Name, Width, Merge) \ 1983 if (!CXXRecordDeclBits.canGetNextNBits(Width)) \ 1984 CXXRecordDeclBits.updateValue(Record.readInt()); \ 1985 Data.Name = CXXRecordDeclBits.getNextBits(Width); 1987#include "clang/AST/CXXRecordDeclDefinitionBits.def" 1992 Data

.HasODRHash =

true

;

1994 if

(

Record

.readInt()) {

1995

Reader.DefinitionSource[

D

] =

1996 Loc

.F->Kind == ModuleKind::MK_MainFile ||

2000 Record

.readUnresolvedSet(

Data

.Conversions);

2001 Data

.ComputedVisibleConversions =

Record

.readInt();

2002 if

(

Data

.ComputedVisibleConversions)

2003 Record

.readUnresolvedSet(

Data

.VisibleConversions);

2004

assert(

Data

.Definition &&

"Data.Definition should be already set!"

);

2006 if

(!

Data

.IsLambda) {

2007

assert(!LambdaContext && !IndexInLambdaContext &&

2008 "given lambda context for non-lambda"

);

2011 if

(

Data

.NumBases)

2012 Data

.Bases = ReadGlobalOffset();

2015 if

(

Data

.NumVBases)

2016 Data

.VBases = ReadGlobalOffset();

2022 auto

&Lambda =

static_cast<

CXXRecordDecl::LambdaDefinitionData &

>

(

Data

);

2025

Lambda.DependencyKind = LambdaBits.getNextBits(

2);

2026

Lambda.IsGenericLambda = LambdaBits.getNextBit();

2027

Lambda.CaptureDefault = LambdaBits.getNextBits(

2);

2028

Lambda.NumCaptures = LambdaBits.getNextBits(

15);

2029

Lambda.HasKnownInternalLinkage = LambdaBits.getNextBit();

2031

Lambda.NumExplicitCaptures =

Record

.readInt();

2032

Lambda.ManglingNumber =

Record

.readInt();

2033 if

(

unsigned

DeviceManglingNumber =

Record

.readInt())

2034

Reader.

getContext

().DeviceLambdaManglingNumbers[

D

] = DeviceManglingNumber;

2035

Lambda.IndexInContext = IndexInLambdaContext;

2036

Lambda.ContextDecl = LambdaContext;

2037 Capture

*ToCapture =

nullptr

;

2038 if

(Lambda.NumCaptures) {

2040

Lambda.NumCaptures);

2041

Lambda.AddCaptureList(Reader.

getContext

(), ToCapture);

2043

Lambda.MethodTyInfo = readTypeSourceInfo();

2044 for

(

unsigned

I = 0, N = Lambda.NumCaptures; I != N; ++I) {

2047 bool

IsImplicit = CaptureBits.getNextBit();

2060 auto

*Var = readDeclAs<ValueDecl>();

2062 new

(ToCapture)

Capture

(

Loc

, IsImplicit,

Kind

, Var, EllipsisLoc);

2071 CXXRecordDecl

*

D

,

struct

CXXRecordDecl::DefinitionData &&MergeDD) {

2072

assert(

D

->DefinitionData &&

2073 "merging class definition into non-definition"

);

2074 auto

&DD = *

D

->DefinitionData;

2076 if

(DD.Definition != MergeDD.Definition) {

2078

Reader.MergedDeclContexts.insert(std::make_pair(MergeDD.Definition,

2080

Reader.PendingDefinitions.erase(MergeDD.Definition);

2081

MergeDD.Definition->demoteThisDefinitionToDeclaration();

2083

assert(!Reader.Lookups.contains(MergeDD.Definition) &&

2084 "already loaded pending lookups for merged definition"

);

2087 auto

PFDI = Reader.PendingFakeDefinitionData.find(&DD);

2088 if

(PFDI != Reader.PendingFakeDefinitionData.end() &&

2089

PFDI->second == ASTReader::PendingFakeDefinitionKind::Fake) {

2092

assert(!DD.IsLambda && !MergeDD.IsLambda &&

"faked up lambda definition?"

);

2093

PFDI->second = ASTReader::PendingFakeDefinitionKind::FakeLoaded;

2097 auto

*Def = DD.Definition;

2098

DD = std::move(MergeDD);

2099

DD.Definition = Def;

2103 bool

DetectedOdrViolation =

false

;

2105 #define FIELD(Name, Width, Merge) Merge(Name) 2106 #define MERGE_OR(Field) DD.Field |= MergeDD.Field; 2107 #define NO_MERGE(Field) \ 2108 DetectedOdrViolation |= DD.Field != MergeDD.Field; \ 2110 #include "clang/AST/CXXRecordDeclDefinitionBits.def" 2115 if

(DD.NumBases != MergeDD.NumBases || DD.NumVBases != MergeDD.NumVBases)

2116

DetectedOdrViolation =

true

;

2122 if

(MergeDD.ComputedVisibleConversions && !DD.ComputedVisibleConversions) {

2123

DD.VisibleConversions = std::move(MergeDD.VisibleConversions);

2124

DD.ComputedVisibleConversions =

true

;

2131 auto

&Lambda1 =

static_cast<

CXXRecordDecl::LambdaDefinitionData &

>

(DD);

2132 auto

&Lambda2 =

static_cast<

CXXRecordDecl::LambdaDefinitionData &

>

(MergeDD);

2133

DetectedOdrViolation |= Lambda1.DependencyKind != Lambda2.DependencyKind;

2134

DetectedOdrViolation |= Lambda1.IsGenericLambda != Lambda2.IsGenericLambda;

2135

DetectedOdrViolation |= Lambda1.CaptureDefault != Lambda2.CaptureDefault;

2136

DetectedOdrViolation |= Lambda1.NumCaptures != Lambda2.NumCaptures;

2137

DetectedOdrViolation |=

2138

Lambda1.NumExplicitCaptures != Lambda2.NumExplicitCaptures;

2139

DetectedOdrViolation |=

2140

Lambda1.HasKnownInternalLinkage != Lambda2.HasKnownInternalLinkage;

2141

DetectedOdrViolation |= Lambda1.ManglingNumber != Lambda2.ManglingNumber;

2143 if

(Lambda1.NumCaptures && Lambda1.NumCaptures == Lambda2.NumCaptures) {

2144 for

(

unsigned

I = 0, N = Lambda1.NumCaptures; I != N; ++I) {

2149

Lambda1.AddCaptureList(Reader.

getContext

(), Lambda2.Captures.front());

2157 if

(

D

->getODRHash() != MergeDD.ODRHash) {

2158

DetectedOdrViolation =

true

;

2161 if

(DetectedOdrViolation)

2162

Reader.PendingOdrMergeFailures[DD.Definition].push_back(

2163

{MergeDD.Definition, &MergeDD});

2167 Decl

*LambdaContext,

2168 unsigned

IndexInLambdaContext) {

2169 struct

CXXRecordDecl::DefinitionData *DD;

2174 bool

IsLambda =

Record

.readInt();

2175

assert(!(IsLambda &&

Update

) &&

2176 "lambda definition should not be added by update record"

);

2178

DD =

new

(

C

) CXXRecordDecl::LambdaDefinitionData(

2181

DD =

new

(

C

)

struct

CXXRecordDecl::DefinitionData(

D

);

2187 if

(!Canon->DefinitionData)

2188

Canon->DefinitionData = DD;

2189 D

->DefinitionData = Canon->DefinitionData;

2190

ReadCXXDefinitionData(*DD,

D

, LambdaContext, IndexInLambdaContext);

2193 D

->setCompleteDefinition(

true

);

2198 if

(Canon->DefinitionData != DD) {

2207

Reader.PendingDefinitions.insert(

D

);

2216

CXXRecNotTemplate = 0,

2218

CXXRecMemberSpecialization,

2222 Decl

*LambdaContext =

nullptr

;

2223 unsigned

IndexInLambdaContext = 0;

2225 switch

((CXXRecKind)

Record

.readInt()) {

2226 case

CXXRecNotTemplate:

2228 if

(!isa<ClassTemplateSpecializationDecl>(

D

))

2231 case

CXXRecTemplate: {

2233 auto

*Template = readDeclAs<ClassTemplateDecl>();

2234 D

->TemplateOrInstantiation = Template;

2235 if

(!Template->getTemplatedDecl()) {

2246 case

CXXRecMemberSpecialization: {

2247 auto

*RD = readDeclAs<CXXRecordDecl>();

2252 D

->TemplateOrInstantiation = MSI;

2257

LambdaContext = readDecl();

2259

IndexInLambdaContext =

Record

.readInt();

2261

MergeImpl.

mergeLambda

(

D

, Redecl, *LambdaContext, IndexInLambdaContext);

2270 bool

WasDefinition =

Record

.readInt();

2272

ReadCXXRecordDefinition(

D

,

false

, LambdaContext,

2273

IndexInLambdaContext);

2280 if

(WasDefinition) {

2282 if

(KeyFn.

isValid

() &&

D

->isCompleteDefinition())

2293 D

->setExplicitSpecifier(

Record

.readExplicitSpec());

2294 D

->Ctor = readDeclAs<CXXConstructorDecl>();

2296 D

->setDeductionCandidateKind(

2298 D

->setSourceDeductionGuide(readDeclAs<CXXDeductionGuideDecl>());

2299 D

->setSourceDeductionGuideKind(

2307 unsigned

NumOverridenMethods =

Record

.readInt();

2309 while

(NumOverridenMethods--) {

2312 if

(

auto

*MD = readDeclAs<CXXMethodDecl>())

2318 Record

.skipInts(NumOverridenMethods);

2325 D

->setExplicitSpecifier(

Record

.readExplicitSpec());

2326 if

(

D

->isInheritingConstructor()) {

2327 auto

*Shadow = readDeclAs<ConstructorUsingShadowDecl>();

2328 auto

*Ctor = readDeclAs<CXXConstructorDecl>();

2339 if

(

auto

*OperatorDelete = readDeclAs<FunctionDecl>()) {

2341 auto

*ThisArg =

Record

.readExpr();

2343 if

(!Canon->OperatorDelete) {

2344

Canon->OperatorDelete = OperatorDelete;

2345

Canon->OperatorDeleteThisArg = ThisArg;

2351 D

->setExplicitSpecifier(

Record

.readExplicitSpec());

2357 D

->ImportedModule = readModule();

2358 D

->setImportComplete(

Record

.readInt());

2360 for

(

unsigned

I = 0, N =

Record

.back(); I != N; ++I)

2361

StoredLocs[I] = readSourceLocation();

2367 D

->setColonLoc(readSourceLocation());

2373 D

->Friend = readDeclAs<NamedDecl>();

2375 D

->Friend = readTypeSourceInfo();

2376 for

(

unsigned

i = 0; i !=

D

->NumTPLists; ++i)

2378 Record

.readTemplateParameterList();

2380 D

->UnsupportedFriend = (

Record

.readInt() != 0);

2381 D

->FriendLoc = readSourceLocation();

2382 D

->EllipsisLoc = readSourceLocation();

2387 unsigned

NumParams =

Record

.readInt();

2388 D

->NumParams = NumParams;

2390 for

(

unsigned

i = 0; i != NumParams; ++i)

2391 D

->Params[i] =

Record

.readTemplateParameterList();

2393 D

->Friend = readDeclAs<NamedDecl>();

2395 D

->Friend = readTypeSourceInfo();

2396 D

->FriendLoc = readSourceLocation();

2402

assert(!

D

->TemplateParams &&

"TemplateParams already set!"

);

2403 D

->TemplateParams =

Record

.readTemplateParameterList();

2404 D

->init(readDeclAs<NamedDecl>());

2409 D

->ConstraintExpr =

Record

.readExpr();

2419 for

(

unsigned

I = 0; I <

D

->NumTemplateArgs; ++I)

2420

Args.push_back(

Record

.readTemplateArgument(

true

));

2421 D

->setTemplateArguments(Args);

2428

llvm::BitstreamCursor &DeclsCursor,

2430

uint64_t Offset = ReadLocalOffset();

2432

Reader.ReadSpecializations(M, DeclsCursor, Offset,

D

, IsPartial);

2446

Reader.PendingDefinitions.insert(CanonD);

2448 D

->Common = CanonD->

Common

;

2452 if

(ThisDeclID == Redecl.getFirstID()) {

2453 if

(

auto

*RTD = readDeclAs<RedeclarableTemplateDecl>()) {

2454

assert(RTD->getKind() ==

D

->

getKind

() &&

2455 "InstantiatedFromMemberTemplate kind mismatch"

);

2456 D

->setInstantiatedFromMemberTemplate(RTD);

2458 D

->setMemberSpecialization();

2472 if

(ThisDeclID == Redecl.getFirstID()) {

2479 if

(

D

->getTemplatedDecl()->TemplateOrInstantiation) {

2484 D

->getTemplatedDecl(),

D

->getInjectedClassNameSpecialization());

2489

llvm_unreachable(

"BuiltinTemplates are not serialized"

);

2499 if

(ThisDeclID == Redecl.getFirstID()) {

2512 if

(

Decl

*InstD = readDecl()) {

2513 if

(

auto

*CTD = dyn_cast<ClassTemplateDecl>(InstD)) {

2514 D

->SpecializedTemplate = CTD;

2517 Record

.readTemplateArgumentList(TemplArgs);

2522

SpecializedPartialSpecialization();

2523

PS->PartialSpecialization

2524

= cast<ClassTemplatePartialSpecializationDecl>(InstD);

2525

PS->TemplateArgs = ArgList;

2526 D

->SpecializedTemplate = PS;

2531 Record

.readTemplateArgumentList(TemplArgs,

true

);

2533 D

->PointOfInstantiation = readSourceLocation();

2536 bool

writtenAsCanonicalDecl =

Record

.readInt();

2537 if

(writtenAsCanonicalDecl) {

2538 auto

*CanonPattern = readDeclAs<ClassTemplateDecl>();

2542 if

(

auto

*Partial = dyn_cast<ClassTemplatePartialSpecializationDecl>(

D

)) {

2543

CanonSpec = CanonPattern->getCommonPtr()->PartialSpecializations

2544

.GetOrInsertNode(Partial);

2547

CanonPattern->getCommonPtr()->Specializations.GetOrInsertNode(

D

);

2550 if

(CanonSpec !=

D

) {

2555 if

(

auto

*DDD =

D

->DefinitionData) {

2556 if

(CanonSpec->DefinitionData)

2559

CanonSpec->DefinitionData =

D

->DefinitionData;

2561 D

->DefinitionData = CanonSpec->DefinitionData;

2567 if

(

Record

.readBool()) {

2570

ExplicitInfo->TemplateKeywordLoc = readSourceLocation();

2571 D

->ExplicitInfo = ExplicitInfo;

2575 D

->setTemplateArgsAsWritten(

Record

.readASTTemplateArgumentListInfo());

2585 D

->TemplateParams = Params;

2590 if

(ThisDeclID == Redecl.getFirstID()) {

2591 D

->InstantiatedFromMember.setPointer(

2592

readDeclAs<ClassTemplatePartialSpecializationDecl>());

2593 D

->InstantiatedFromMember.setInt(

Record

.readInt());

2600 if

(ThisDeclID == Redecl.getFirstID()) {

2614 if

(

Decl

*InstD = readDecl()) {

2615 if

(

auto

*VTD = dyn_cast<VarTemplateDecl>(InstD)) {

2616 D

->SpecializedTemplate = VTD;

2619 Record

.readTemplateArgumentList(TemplArgs);

2624

VarTemplateSpecializationDecl::SpecializedPartialSpecialization();

2625

PS->PartialSpecialization =

2626

cast<VarTemplatePartialSpecializationDecl>(InstD);

2627

PS->TemplateArgs = ArgList;

2628 D

->SpecializedTemplate = PS;

2633 if

(

Record

.readBool()) {

2636

ExplicitInfo->TemplateKeywordLoc = readSourceLocation();

2637 D

->ExplicitInfo = ExplicitInfo;

2641 D

->setTemplateArgsAsWritten(

Record

.readASTTemplateArgumentListInfo());

2644 Record

.readTemplateArgumentList(TemplArgs,

true

);

2646 D

->PointOfInstantiation = readSourceLocation();

2648 D

->IsCompleteDefinition =

Record

.readInt();

2652 bool

writtenAsCanonicalDecl =

Record

.readInt();

2653 if

(writtenAsCanonicalDecl) {

2654 auto

*CanonPattern = readDeclAs<VarTemplateDecl>();

2657 if

(

auto

*Partial = dyn_cast<VarTemplatePartialSpecializationDecl>(

D

)) {

2658

CanonSpec = CanonPattern->getCommonPtr()

2659

->PartialSpecializations.GetOrInsertNode(Partial);

2662

CanonPattern->getCommonPtr()->Specializations.GetOrInsertNode(

D

);

2665 if

(CanonSpec !=

D

)

2681 D

->TemplateParams = Params;

2686 if

(ThisDeclID == Redecl.getFirstID()) {

2687 D

->InstantiatedFromMember.setPointer(

2688

readDeclAs<VarTemplatePartialSpecializationDecl>());

2689 D

->InstantiatedFromMember.setInt(

Record

.readInt());

2696 D

->setDeclaredWithTypename(

Record

.readInt());

2698 bool

TypeConstraintInitialized =

D

->hasTypeConstraint() &&

Record

.readBool();

2699 if

(TypeConstraintInitialized) {

2702

CR =

Record

.readConceptReference();

2703 Expr

*ImmediatelyDeclaredConstraint =

Record

.readExpr();

2705 D

->setTypeConstraint(CR, ImmediatelyDeclaredConstraint);

2706 if

((

D

->ExpandedParameterPack =

Record

.readInt()))

2707 D

->NumExpanded =

Record

.readInt();

2712 Record

.readTemplateArgumentLoc());

2718 D

->setDepth(

Record

.readInt());

2719 D

->setPosition(

Record

.readInt());

2720 if

(

D

->hasPlaceholderTypeConstraint())

2721 D

->setPlaceholderTypeConstraint(

Record

.readExpr());

2722 if

(

D

->isExpandedParameterPack()) {

2723 auto

TypesAndInfos =

2724 D

->getTrailingObjects<std::pair<QualType, TypeSourceInfo *>>();

2725 for

(

unsigned

I = 0, N =

D

->getNumExpansionTypes(); I != N; ++I) {

2727

TypesAndInfos[I].second = readTypeSourceInfo();

2731 D

->ParameterPack =

Record

.readInt();

2734 Record

.readTemplateArgumentLoc());

2740 D

->setDeclaredWithTypename(

Record

.readBool());

2742 D

->setDepth(

Record

.readInt());

2743 D

->setPosition(

Record

.readInt());

2744 if

(

D

->isExpandedParameterPack()) {

2746 for

(

unsigned

I = 0, N =

D

->getNumExpansionTemplateParameters();

2748 Data

[I] =

Record

.readTemplateParameterList();

2751 D

->ParameterPack =

Record

.readInt();

2754 Record

.readTemplateArgumentLoc());

2765 D

->AssertExprAndFailed.setPointer(

Record

.readExpr());

2766 D

->AssertExprAndFailed.setInt(

Record

.readInt());

2767 D

->Message = cast_or_null<StringLiteral>(

Record

.readExpr());

2768 D

->RParenLoc = readSourceLocation();

2778 D

->ExtendingDecl = readDeclAs<ValueDecl>();

2779 D

->ExprWithTemporary =

Record

.readStmt();

2780 if

(

Record

.readInt()) {

2784 D

->ManglingNumber =

Record

.readInt();

2789

uint64_t &VisibleOffset,

2790

uint64_t &ModuleLocalOffset,

2791

uint64_t &TULocalOffset) {

2792

LexicalOffset = ReadLocalOffset();

2793

VisibleOffset = ReadLocalOffset();

2794

ModuleLocalOffset = ReadLocalOffset();

2795

TULocalOffset = ReadLocalOffset();

2798template

<

typename

T>

2801 Decl

*MergeWith =

nullptr

;

2803 bool

IsKeyDecl = ThisDeclID == FirstDeclID;

2804 bool

IsFirstLocalDecl =

false

;

2806

uint64_t RedeclOffset = 0;

2811

FirstDeclID = ThisDeclID;

2813

IsFirstLocalDecl =

true

;

2814

}

else if

(

unsigned

N =

Record

.readInt()) {

2818

IsFirstLocalDecl =

true

;

2825 for

(

unsigned

I = 0; I != N - 1; ++I)

2826

MergeWith = readDecl();

2828

RedeclOffset = ReadLocalOffset();

2835 auto

*FirstDecl = cast_or_null<T>(Reader.

GetDecl

(FirstDeclID));

2836 if

(FirstDecl !=

D

) {

2845 auto

*DAsT =

static_cast<T

*

>

(

D

);

2851 if

(IsFirstLocalDecl)

2852

Reader.PendingDeclChains.push_back(std::make_pair(DAsT, RedeclOffset));

2854 return

RedeclarableResult(MergeWith, FirstDeclID, IsKeyDecl);

2859template

<

typename

T>

2861

RedeclarableResult &Redecl) {

2870 auto

*

D

=

static_cast<T

*

>

(DBase);

2872 if

(

auto

*Existing = Redecl.getKnownMergeTarget())

2875 else if

(FindExistingResult ExistingRes = findExisting(

D

))

2876 if

(

T

*Existing = ExistingRes)

2887 Decl

&Context,

unsigned

IndexInContext) {

2896 if

(

auto

*Existing = Redecl.getKnownMergeTarget())

2902 NamedDecl

*&Slot = Reader.LambdaDeclarationsForMerging[{

2903

Context.getCanonicalDecl(), IndexInContext}];

2911

RedeclarableResult &Redecl) {

2924

llvm_unreachable(

"bad assert_cast"

);

2932 auto

*DPattern =

D

->getTemplatedDecl();

2934

RedeclarableResult

Result

(

2936

DPattern->getCanonicalDecl()->getGlobalID(), IsKeyDecl);

2938 if

(

auto

*DClass = dyn_cast<CXXRecordDecl>(DPattern)) {

2941 auto

*ExistingClass =

2942

cast<CXXRecordDecl>(ExistingPattern)->getCanonicalDecl();

2943 if

(

auto

*DDD = DClass->DefinitionData) {

2944 if

(ExistingClass->DefinitionData) {

2947

ExistingClass->DefinitionData = DClass->DefinitionData;

2950

Reader.PendingDefinitions.insert(DClass);

2953

DClass->DefinitionData = ExistingClass->DefinitionData;

2958 if

(

auto

*DFunction = dyn_cast<FunctionDecl>(DPattern))

2961 if

(

auto

*DVar = dyn_cast<VarDecl>(DPattern))

2963 if

(

auto

*DAlias = dyn_cast<TypeAliasDecl>(DPattern))

2966

llvm_unreachable(

"merged an unknown kind of redeclarable template"

);

2971template

<

typename

T>

2974 auto

*

D

=

static_cast<T

*

>

(DBase);

2975 T

*ExistingCanon = Existing->getCanonicalDecl();

2977 if

(ExistingCanon != DCanon) {

2982 D

->First = ExistingCanon;

2983

ExistingCanon->Used |=

D

->Used;

2986 bool

IsKeyDecl = KeyDeclID.

isValid

();

2989 if

(

auto

*DTemplate = dyn_cast<RedeclarableTemplateDecl>(

D

))

2991

DTemplate, assert_cast<RedeclarableTemplateDecl *>(ExistingCanon),

2996

Reader.KeyDecls[ExistingCanon].push_back(KeyDeclID);

3009 if

(isa<EnumConstantDecl, FieldDecl, IndirectFieldDecl>(ND))

3024

Reader.LETemporaryForMerging[std::make_pair(

3037template

<

typename

T>

3051 if

(FindExistingResult ExistingRes = findExisting(

static_cast<T

*

>

(

D

)))

3052 if

(

T

*Existing = ExistingRes)

3054

Existing->getCanonicalDecl());

3058 Record

.readOMPChildren(

D

->Data);

3063 Record

.readOMPChildren(

D

->Data);

3068 Record

.readOMPChildren(

D

->Data);

3077 D

->setCombinerData(In, Out);

3079 D

->setCombiner(Combiner);

3082 D

->setInitializerData(Orig, Priv);

3085 D

->setInitializer(

Init

, IK);

3090 Record

.readOMPChildren(

D

->Data);

3092 D

->VarName =

Record

.readDeclarationName();

3111

uint64_t readInt() {

3115 bool

readBool() {

return

Reader.

readBool

(); }

3129

std::string readString() {

3141

VersionTuple readVersionTuple() {

3147 template

<

typename

T>

T

*readDeclAs() {

return

Reader.

readDeclAs

<

T

>(); }

3152

AttrReader

Record

(*

this

);

3157 Attr

*New =

nullptr

;

3167 unsigned

ParsedKind =

Record

.readInt();

3168 unsigned

Syntax =

Record

.readInt();

3169 unsigned

SpellingIndex =

Record

.readInt();

3170 bool

IsAlignas = (ParsedKind == AttributeCommonInfo::AT_Aligned &&

3172

SpellingIndex == AlignedAttr::Keyword_alignas);

3173 bool

IsRegularKeywordAttribute =

Record

.readBool();

3178

IsAlignas, IsRegularKeywordAttribute});

3180#include "clang/Serialization/AttrPCHRead.inc" 3182

assert(New &&

"Unable to decode attribute?"

);

3188 for

(

unsigned

I = 0,

E

=

readInt

(); I !=

E

; ++I)

3203inline void

ASTReader::LoadedDecl(

unsigned

Index,

Decl

*

D

) {

3204

assert(!DeclsLoaded[Index] &&

"Decl loaded twice?"

);

3205

DeclsLoaded[Index] =

D

;

3214bool

ASTReader::isConsumerInterestedIn(

Decl

*

D

) {

3233 if

(

const auto

*Var = dyn_cast<VarDecl>(

D

))

3234 return

Var->isFileVarDecl() &&

3236

OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(Var));

3237 if

(

const auto

*

Func

= dyn_cast<FunctionDecl>(

D

))

3238 return Func

->doesThisDeclarationHaveABody() || PendingBodies.count(

D

);

3248

ASTReader::RecordLocation ASTReader::DeclCursorForID(

GlobalDeclID

ID,

3252 unsigned

LocalDeclIndex =

ID

.getLocalDeclIndex();

3258

ASTReader::RecordLocation ASTReader::getLocalBitOffset(uint64_t GlobalOffset) {

3259 auto

I = GlobalBitOffsetsMap.find(GlobalOffset);

3261

assert(I != GlobalBitOffsetsMap.end() &&

"Corrupted global bit offsets map"

);

3262 return

RecordLocation(I->second, GlobalOffset - I->second->GlobalBitOffset);

3270

ASTDeclReader::getOrFakePrimaryClassDefinition(

ASTReader

&Reader,

3273 auto

*DD = RD->DefinitionData;

3282

DD =

new

(Reader.

getContext

())

struct

CXXRecordDecl::DefinitionData(RD);

3284

RD->DefinitionData = DD;

3288

Reader.PendingFakeDefinitionData.insert(

3289

std::make_pair(DD, ASTReader::PendingFakeDefinitionKind::Fake));

3292 return

DD->Definition;

3299 if

(

auto

*ND = dyn_cast<NamespaceDecl>(DC))

3300 return

ND->getFirstDecl();

3302 if

(

auto

*RD = dyn_cast<CXXRecordDecl>(DC))

3303 return

getOrFakePrimaryClassDefinition(Reader, RD);

3305 if

(

auto

*RD = dyn_cast<RecordDecl>(DC))

3308 if

(

auto

*ED = dyn_cast<EnumDecl>(DC))

3311 if

(

auto

*OID = dyn_cast<ObjCInterfaceDecl>(DC))

3316 if

(

auto

*TU = dyn_cast<TranslationUnitDecl>(DC))

3322

ASTDeclReader::FindExistingResult::~FindExistingResult() {

3325 if

(TypedefNameForLinkage) {

3327

Reader.ImportedTypedefNamesForLinkage.insert(

3328

std::make_pair(std::make_pair(DC, TypedefNameForLinkage), New));

3332 if

(!AddResult || Existing)

3338

setAnonymousDeclForMerging(Reader, New->getLexicalDeclContext(),

3339

AnonymousDeclNumber, New);

3343

Reader.PendingFakeLookupResults[Name.getAsIdentifierInfo()]

3345

}

else if

(

DeclContext

*MergeDC = getPrimaryContextForMerging(Reader, DC)) {

3348

MergeDC->makeDeclVisibleInContextImpl(New,

true

);

3356 bool

IsTypedefNameForLinkage) {

3357 if

(!IsTypedefNameForLinkage)

3363 if

(

Found

->isFromASTFile())

3366 if

(

auto

*TND = dyn_cast<TypedefNameDecl>(

Found

))

3367 return

TND->getAnonDeclWithTypedefName(

true

);

3376

ASTDeclReader::getPrimaryDCForAnonymousDecl(

DeclContext

*LexicalDC) {

3378 if

(

auto

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

3380 return

DD ? DD->Definition :

nullptr

;

3381

}

else if

(

auto

*OID = dyn_cast<ObjCInterfaceDecl>(LexicalDC)) {

3382 return

OID->getCanonicalDecl()->getDefinition();

3389 if

(

auto

*FD = dyn_cast<FunctionDecl>(

D

))

3390 if

(FD->isThisDeclarationADefinition())

3392 if

(

auto

*MD = dyn_cast<ObjCMethodDecl>(

D

))

3393 if

(MD->isThisDeclarationADefinition())

3395 if

(

auto

*RD = dyn_cast<RecordDecl>(

D

))

3412 auto

&

Previous

= Reader.AnonymousDeclarationsForMerging[CanonDC];

3418 auto

*PrimaryDC = getPrimaryDCForAnonymousDecl(DC);

3419 if

(PrimaryDC && !cast<Decl>(PrimaryDC)->isFromASTFile()) {

3431void

ASTDeclReader::setAnonymousDeclForMerging(

ASTReader

&Reader,

3434 auto

*CanonDC = cast<Decl>(DC)->getCanonicalDecl();

3436 auto

&

Previous

= Reader.AnonymousDeclarationsForMerging[CanonDC];

3443

ASTDeclReader::FindExistingResult ASTDeclReader::findExisting(

NamedDecl

*

D

) {

3445

:

D

->getDeclName();

3450

FindExistingResult

Result

(Reader,

D

,

nullptr

,

3451

AnonymousDeclNumber, TypedefNameForLinkage);

3458 if

(TypedefNameForLinkage) {

3459 auto

It = Reader.ImportedTypedefNamesForLinkage.find(

3460

std::make_pair(DC, TypedefNameForLinkage));

3461 if

(It != Reader.ImportedTypedefNamesForLinkage.end())

3462 if

(

C

.isSameEntity(It->second,

D

))

3463 return

FindExistingResult(Reader,

D

, It->second, AnonymousDeclNumber,

3464

TypedefNameForLinkage);

3472 if

(

auto

*Existing = getAnonymousDeclForMerging(

3474 if

(

C

.isSameEntity(Existing,

D

))

3475 return

FindExistingResult(Reader,

D

, Existing, AnonymousDeclNumber,

3476

TypedefNameForLinkage);

3483 class

UpToDateIdentifierRAII {

3485 bool

WasOutToDate =

false

;

3496

~UpToDateIdentifierRAII() {

3500

} UpToDate(Name.getAsIdentifierInfo());

3503

IEnd = IdResolver.

end

();

3506 if

(

C

.isSameEntity(Existing,

D

))

3507 return

FindExistingResult(Reader,

D

, Existing, AnonymousDeclNumber,

3508

TypedefNameForLinkage);

3510

}

else if

(

DeclContext

*MergeDC = getPrimaryContextForMerging(Reader, DC)) {

3514 if

(

C

.isSameEntity(Existing,

D

))

3515 return

FindExistingResult(Reader,

D

, Existing, AnonymousDeclNumber,

3516

TypedefNameForLinkage);

3520 return

FindExistingResult(Reader);

3532 if

(MergedDCIt != Reader.MergedDeclContexts.end() &&

3535

Reader.PendingOdrMergeChecks.push_back(

D

);

3537 return

FindExistingResult(Reader,

D

,

nullptr

,

3538

AnonymousDeclNumber, TypedefNameForLinkage);

3541template

<

typename

DeclT>

3543 return D

->RedeclLink.getLatestNotUpdated();

3547

llvm_unreachable(

"getMostRecentDecl on non-redeclarable declaration"

);

3554#define ABSTRACT_DECL(TYPE) 3555#define DECL(TYPE, BASE) \ 3557 return getMostRecentDeclImpl(cast<TYPE##Decl>(D)); 3558#include "clang/AST/DeclNodes.inc" 3560

llvm_unreachable(

"unknown decl kind"

);

3563Decl

*ASTReader::getMostRecentExistingDecl(

Decl

*

D

) {

3571 const auto

*IA =

Previous

->getAttr<MSInheritanceAttr>();

3573 if

(IA && !

D

->

hasAttr

<MSInheritanceAttr>()) {

3574

NewAttr = cast<InheritableAttr>(IA->clone(Context));

3579 const auto

*AA =

Previous

->getAttr<AvailabilityAttr>();

3580 if

(AA && !

D

->

hasAttr

<AvailabilityAttr>()) {

3581

NewAttr = AA->

clone

(Context);

3588template

<

typename

DeclT>

3592 D

->RedeclLink.setPrevious(cast<DeclT>(

Previous

));

3593 D

->First = cast<DeclT>(

Previous

)->First;

3602 auto

*VD =

static_cast<VarDecl

*

>

(

D

);

3603 auto

*PrevVD = cast<VarDecl>(

Previous

);

3604 D

->RedeclLink.setPrevious(PrevVD);

3605 D

->First = PrevVD->First;

3614

VD->demoteThisDefinitionToDeclaration();

3631 auto

*PrevFD = cast<FunctionDecl>(

Previous

);

3633

FD->RedeclLink.setPrevious(PrevFD);

3634

FD->First = PrevFD->First;

3638 if

(PrevFD->isInlined() != FD->isInlined()) {

3654

FD->setImplicitlyInline(

true

);

3659 if

(FPT && PrevFPT) {

3663 bool

WasUnresolved =

3665 if

(IsUnresolved != WasUnresolved)

3666

Reader.PendingExceptionSpecUpdates.insert(

3667

{Canon, IsUnresolved ? PrevFD : FD});

3673 if

(IsUndeduced != WasUndeduced)

3674

Reader.PendingDeducedTypeUpdates.insert(

3675

{cast<FunctionDecl>(Canon),

3676

(IsUndeduced ? PrevFPT : FPT)->getReturnType()});

3683

llvm_unreachable(

"attachPreviousDecl on non-redeclarable declaration"

);

3688template

<

typename

ParmDecl>

3691 auto

*To = cast<ParmDecl>(ToD);

3692 if

(!From->hasDefaultArgument())

3694

To->setInheritedDefaultArgument(Context, From);

3703

assert(FromTP->size() == ToTP->size() &&

"merged mismatched templates?"

);

3705 for

(

unsigned

I = 0, N = FromTP->size(); I != N; ++I) {

3706 NamedDecl

*FromParam = FromTP->getParam(I);

3709 if

(

auto

*FTTP = dyn_cast<TemplateTypeParmDecl>(FromParam))

3711 else if

(

auto

*FNTTP = dyn_cast<NonTypeTemplateParmDecl>(FromParam))

3715

Context, cast<TemplateTemplateParmDecl>(FromParam), ToParam);

3733 if

(!isa<VarDecl, FunctionDecl, TagDecl, RedeclarableTemplateDecl>(

Previous

))

3741 if

(isa<VarTemplateSpecializationDecl>(

Previous

))

3743 if

(isa<ClassTemplateSpecializationDecl>(

Previous

))

3746 Func

&&

Func

->getTemplateSpecializationInfo())

3763

Reader.PendingWarningForDuplicatedDefsInModuleUnits.push_back(

3773

diag::err_multiple_decl_in_different_modules)

3783#define ABSTRACT_DECL(TYPE) 3784#define DECL(TYPE, BASE) \ 3786 attachPreviousDeclImpl(Reader, cast<TYPE##Decl>(D), Previous, Canon); \ 3788#include "clang/AST/DeclNodes.inc" 3804 if

(

auto

*TD = dyn_cast<TemplateDecl>(

D

))

3806

cast<TemplateDecl>(

Previous

), TD);

3812

mergeInheritableAttributes(Reader,

D

,

Previous

);

3815template

<

typename

DeclT>

3817 D

->RedeclLink.setLatest(cast<DeclT>(Latest));

3821

llvm_unreachable(

"attachLatestDecl on non-redeclarable declaration"

);

3825

assert(

D

&& Latest);

3828#define ABSTRACT_DECL(TYPE) 3829#define DECL(TYPE, BASE) \ 3831 attachLatestDeclImpl(cast<TYPE##Decl>(D), Latest); \ 3833#include "clang/AST/DeclNodes.inc" 3837template

<

typename

DeclT>

3839 D

->RedeclLink.markIncomplete();

3843

llvm_unreachable(

"markIncompleteDeclChain on non-redeclarable declaration"

);

3846void

ASTReader::markIncompleteDeclChain(

Decl

*

D

) {

3848#define ABSTRACT_DECL(TYPE) 3849#define DECL(TYPE, BASE) \ 3851 ASTDeclReader::markIncompleteDeclChainImpl(cast<TYPE##Decl>(D)); \ 3853#include "clang/AST/DeclNodes.inc" 3860

RecordLocation

Loc

= DeclCursorForID(ID, DeclLoc);

3861

llvm::BitstreamCursor &DeclsCursor =

Loc

.F->DeclsCursor;

3866

ReadingKindTracker ReadingKind(Read_Decl, *

this

);

3869

Deserializing ADecl(

this

);

3871 auto

Fail = [](

const char

*what, llvm::Error &&Err) {

3872

llvm::report_fatal_error(Twine(

"ASTReader::readDeclRecord failed "

) + what +

3876 if

(llvm::Error JumpFailed = DeclsCursor.JumpToBit(

Loc

.Offset))

3877

Fail(

"jumping"

, std::move(JumpFailed));

3882

Fail(

"reading code"

, MaybeCode.takeError());

3883 unsigned

Code = MaybeCode.get();

3886 Decl

*

D

=

nullptr

;

3889

llvm::report_fatal_error(

3890

Twine(

"ASTReader::readDeclRecord failed reading decl code: "

) +

3891 toString

(MaybeDeclCode.takeError()));

3893 switch

((

DeclCode

)MaybeDeclCode.get()) {

3900

llvm_unreachable(

"Record cannot be de-serialized with readDeclRecord"

);

4010 bool

HasTypeConstraint =

Record

.readInt();

4016 bool

HasTypeConstraint =

Record

.readInt();

4022 bool

HasTypeConstraint =

Record

.readInt();

4024

Context, ID,

Record

.readInt(), HasTypeConstraint);

4113 D

= MSGuidDecl::CreateDeserialized(Context, ID);

4116 D

= UnnamedGlobalConstantDecl::CreateDeserialized(Context, ID);

4119 D

= TemplateParamObjectDecl::CreateDeserialized(Context, ID);

4128

Error(

"attempt to read a C++ base-specifier record as a declaration"

);

4131

Error(

"attempt to read a C++ ctor initializer record as a declaration"

);

4140 unsigned

NumChildren =

Record

.readInt();

4146 unsigned

NumClauses =

Record

.readInt();

4147 unsigned

NumVars =

Record

.readInt();

4153 unsigned

NumClauses =

Record

.readInt();

4162 unsigned

NumClauses =

Record

.readInt();

4195

assert(

D

&&

"Unknown declaration reading AST file"

);

4196

LoadedDecl(translateGlobalDeclIDToIndex(ID),

D

);

4207 if

(

auto

*DC = dyn_cast<DeclContext>(

D

)) {

4213

Reader.VisitDeclContext(DC, LexicalOffset, VisibleOffset, ModuleLocalOffset,

4219 if

(!LexicalOffset && !VisibleOffset && !ModuleLocalOffset &&

4220

isa<NamespaceDecl>(

D

))

4221 if

(

auto Iter

= DelayedNamespaceOffsetMap.find(ID);

4222 Iter

!= DelayedNamespaceOffsetMap.end()) {

4223

LexicalOffset =

Iter

->second.LexicalOffset;

4224

VisibleOffset =

Iter

->second.VisibleOffset;

4225

ModuleLocalOffset =

Iter

->second.ModuleLocalOffset;

4226

TULocalOffset =

Iter

->second.TULocalOffset;

4229 if

(LexicalOffset &&

4230

ReadLexicalDeclContextStorage(*

Loc

.F, DeclsCursor, LexicalOffset, DC))

4232 if

(VisibleOffset && ReadVisibleDeclContextStorage(

4233

*

Loc

.F, DeclsCursor, VisibleOffset, ID,

4234

VisibleDeclContextStorageKind::GenerallyVisible))

4236 if

(ModuleLocalOffset &&

4237

ReadVisibleDeclContextStorage(

4238

*

Loc

.F, DeclsCursor, ModuleLocalOffset, ID,

4239

VisibleDeclContextStorageKind::ModuleLocalVisible))

4241 if

(TULocalOffset && ReadVisibleDeclContextStorage(

4242

*

Loc

.F, DeclsCursor, TULocalOffset, ID,

4243

VisibleDeclContextStorageKind::TULocalVisible))

4249

PendingUpdateRecords.push_back(

4250

PendingUpdateRecord(ID,

D

,

true

));

4253 if

(

auto

*

Class

= dyn_cast<ObjCInterfaceDecl>(

D

))

4256 if

(

Class

->isThisDeclarationADefinition() ||

4257

PendingDefinitions.count(

Class

))

4258

loadObjCCategories(ID,

Class

);

4264

PotentiallyInterestingDecls.push_back(

D

);

4269void

ASTReader::PassInterestingDeclsToConsumer() {

4272 if

(PassingDeclsToConsumer)

4277 SaveAndRestore

GuardPassingDeclsToConsumer(PassingDeclsToConsumer,

true

);

4281 for

(

auto

ID : EagerlyDeserializedDecls)

4283

EagerlyDeserializedDecls.clear();

4285 auto

ConsumingPotentialInterestingDecls = [

this

]() {

4286 while

(!PotentiallyInterestingDecls.empty()) {

4287 Decl

*

D

= PotentiallyInterestingDecls.front();

4288

PotentiallyInterestingDecls.pop_front();

4289 if

(isConsumerInterestedIn(

D

))

4290

PassInterestingDeclToConsumer(

D

);

4293

std::deque<Decl *> MaybeInterestingDecls =

4294

std::move(PotentiallyInterestingDecls);

4295

PotentiallyInterestingDecls.clear();

4296

assert(PotentiallyInterestingDecls.empty());

4297 while

(!MaybeInterestingDecls.empty()) {

4298 Decl

*

D

= MaybeInterestingDecls.front();

4299

MaybeInterestingDecls.pop_front();

4305 if

(

auto

*VD = dyn_cast<VarDecl>(

D

);

4306

VD && VD->isFileVarDecl() && !VD->isExternallyVisible())

4308

ConsumingPotentialInterestingDecls();

4309 if

(isConsumerInterestedIn(

D

))

4310

PassInterestingDeclToConsumer(

D

);

4314

ConsumingPotentialInterestingDecls();

4317 auto

*RD = cast<CXXRecordDecl>(

GetDecl

(ID));

4319

PassVTableToConsumer(RD);

4321

VTablesToEmit.clear();

4324void

ASTReader::loadDeclUpdateRecords(PendingUpdateRecord &

Record

) {

4330

ProcessingUpdatesRAIIObj ProcessingUpdates(*

this

);

4331

DeclUpdateOffsetsMap::iterator UpdI = DeclUpdateOffsets.find(ID);

4333 if

(UpdI != DeclUpdateOffsets.end()) {

4334 auto

UpdateOffsets = std::move(UpdI->second);

4335

DeclUpdateOffsets.erase(UpdI);

4341 bool

WasInteresting =

Record

.JustLoaded || isConsumerInterestedIn(

D

);

4342 for

(

auto

&FileAndOffset : UpdateOffsets) {

4344 uint64_t

Offset = FileAndOffset.second;

4347 if

(llvm::Error JumpFailed =

Cursor

.JumpToBit(Offset))

4349

llvm::report_fatal_error(

4350

Twine(

"ASTReader::loadDeclUpdateRecords failed jumping: "

) +

4354

llvm::report_fatal_error(

4355

Twine(

"ASTReader::loadDeclUpdateRecords failed reading code: "

) +

4357 unsigned

Code = MaybeCode.get();

4361 "Expected DECL_UPDATES record!"

);

4363

llvm::report_fatal_error(

4364

Twine(

"ASTReader::loadDeclUpdateRecords failed reading rec code: "

) +

4369

Reader.UpdateDecl(

D

);

4373 if

(!WasInteresting && isConsumerInterestedIn(

D

)) {

4374

PotentiallyInterestingDecls.push_back(

D

);

4375

WasInteresting =

true

;

4381 if

(

auto

I = PendingVisibleUpdates.find(ID);

4382

I != PendingVisibleUpdates.end()) {

4383 auto

VisibleUpdates = std::move(I->second);

4384

PendingVisibleUpdates.erase(I);

4387 for

(

const auto

&

Update

: VisibleUpdates)

4388

Lookups[DC].Table.add(

4394 if

(

auto

I = PendingModuleLocalVisibleUpdates.find(ID);

4395

I != PendingModuleLocalVisibleUpdates.end()) {

4396 auto

ModuleLocalVisibleUpdates = std::move(I->second);

4397

PendingModuleLocalVisibleUpdates.erase(I);

4400 for

(

const auto

&

Update

: ModuleLocalVisibleUpdates)

4401

ModuleLocalLookups[DC].Table.add(

4409 if

(

auto

I = TULocalUpdates.find(ID); I != TULocalUpdates.end()) {

4410 auto

Updates = std::move(I->second);

4411

TULocalUpdates.erase(I);

4414 for

(

const auto

&

Update

: Updates)

4415

TULocalLookups[DC].Table.add(

4423 if

(

auto

IT = RelatedDeclsMap.find(ID); IT != RelatedDeclsMap.end()) {

4424 for

(

auto

LID : IT->second)

4426

RelatedDeclsMap.erase(IT);

4431 if

(

auto

I = PendingSpecializationsUpdates.find(ID);

4432

I != PendingSpecializationsUpdates.end()) {

4433 auto

SpecializationUpdates = std::move(I->second);

4434

PendingSpecializationsUpdates.erase(I);

4436 for

(

const auto

&

Update

: SpecializationUpdates)

4437

AddSpecializations(

D

,

Update

.Data, *

Update

.Mod,

false

);

4441 if

(

auto

I = PendingPartialSpecializationsUpdates.find(ID);

4442

I != PendingPartialSpecializationsUpdates.end()) {

4443 auto

SpecializationUpdates = std::move(I->second);

4444

PendingPartialSpecializationsUpdates.erase(I);

4446 for

(

const auto

&

Update

: SpecializationUpdates)

4447

AddSpecializations(

D

,

Update

.Data, *

Update

.Mod,

true

);

4451void

ASTReader::loadPendingDeclChain(

Decl

*FirstLocal, uint64_t LocalOffset) {

4454 if

(FirstLocal != CanonDecl) {

4457

*

this

, FirstLocal, PrevMostRecent ? PrevMostRecent : CanonDecl,

4468

assert(M &&

"imported decl from no module file"

);

4472 if

(llvm::Error JumpFailed =

Cursor

.JumpToBit(LocalOffset))

4473

llvm::report_fatal_error(

4474

Twine(

"ASTReader::loadPendingDeclChain failed jumping: "

) +

4480

llvm::report_fatal_error(

4481

Twine(

"ASTReader::loadPendingDeclChain failed reading code: "

) +

4483 unsigned

Code = MaybeCode.get();

4486 "expected LOCAL_REDECLARATIONS record!"

);

4488

llvm::report_fatal_error(

4489

Twine(

"ASTReader::loadPendingDeclChain failed reading rec code: "

) +

4494 Decl

*MostRecent = FirstLocal;

4495 for

(

unsigned

I = 0, N =

Record

.size(); I != N; ++I) {

4496 unsigned

Idx = N - I - 1;

4508 class

ObjCCategoriesVisitor {

4511

llvm::SmallPtrSetImpl<ObjCCategoryDecl *> &Deserialized;

4513

llvm::DenseMap<DeclarationName, ObjCCategoryDecl *> NameCategoryMap;

4515 unsigned

PreviousGeneration;

4519 if

(!Deserialized.erase(Cat))

4530

NonEquivalentDecls, StructuralEquivalenceKind::Default,

4534 if

(!Ctx.IsEquivalent(Cat, Existing)) {

4539

diag::note_previous_definition);

4541

}

else if

(!Existing) {

4556

ObjCCategoriesVisitor(

4558

llvm::SmallPtrSetImpl<ObjCCategoryDecl *> &Deserialized,

4561

InterfaceID(InterfaceID), PreviousGeneration(PreviousGeneration) {

4563 for

(

auto

*Cat :

Interface

->known_categories()) {

4594

LocalID != Result->getDefinitionID()) {

4602 unsigned

Offset = Result->Offset;

4605 for

(

unsigned

I = 0; I != N; ++I)

4614 unsigned

PreviousGeneration) {

4615

ObjCCategoriesVisitor Visitor(*

this

,

D

, CategoriesDeserialized, ID,

4616

PreviousGeneration);

4617

ModuleMgr.

visit

(Visitor);

4620template

<

typename

DeclT,

typename

Fn>

4628 bool Found

=

false

;

4629 for

(

auto

*Redecl = MostRecent; Redecl && !

Found

;

4630

Redecl = Redecl->getPreviousDecl())

4635 for

(

auto

*Redecl = MostRecent; Redecl !=

D

;

4645 auto

*RD = cast<CXXRecordDecl>(

D

);

4647

assert(MD &&

"couldn't read decl from update record"

);

4648

Reader.PendingAddedClassMembers.push_back({RD, MD});

4653 auto

*Anon = readDeclAs<NamespaceDecl>();

4658 if

(!

Record

.isModule()) {

4659 if

(

auto

*TU = dyn_cast<TranslationUnitDecl>(

D

))

4660

TU->setAnonymousNamespace(Anon);

4662

cast<NamespaceDecl>(

D

)->setAnonymousNamespace(Anon);

4668 auto

*VD = cast<VarDecl>(

D

);

4669

VD->NonParmVarDeclBits.IsInline =

Record

.readInt();

4670

VD->NonParmVarDeclBits.IsInlineSpecified =

Record

.readInt();

4677 if

(

auto

*VTSD = dyn_cast<VarTemplateSpecializationDecl>(

D

)) {

4678

VTSD->setPointOfInstantiation(POI);

4679

}

else if

(

auto

*VD = dyn_cast<VarDecl>(

D

)) {

4681

assert(MSInfo &&

"No member specialization information"

);

4684 auto

*FD = cast<FunctionDecl>(

D

);

4685 if

(

auto

*FTSInfo = dyn_cast<FunctionTemplateSpecializationInfo *>(

4686

FD->TemplateOrSpecialization))

4687

FTSInfo->setPointOfInstantiation(POI);

4689

cast<MemberSpecializationInfo *>(FD->TemplateOrSpecialization)

4690

->setPointOfInstantiation(POI);

4696 auto

*Param = cast<ParmVarDecl>(

D

);

4701 auto

*DefaultArg =

Record

.readExpr();

4705 if

(Param->hasUninstantiatedDefaultArg())

4706

Param->setDefaultArg(DefaultArg);

4711 auto

*FD = cast<FieldDecl>(

D

);

4712 auto

*DefaultInit =

Record

.readExpr();

4716 if

(FD->hasInClassInitializer() && !FD->hasNonNullInClassInitializer()) {

4718

FD->setInClassInitializer(DefaultInit);

4722

FD->removeInClassInitializer();

4728 auto

*FD = cast<FunctionDecl>(

D

);

4729 if

(Reader.PendingBodies[FD]) {

4735 if

(

Record

.readInt()) {

4743

FD->setInnerLocStart(readSourceLocation());

4745

assert(

Record

.getIdx() ==

Record

.size() &&

"lazy body must be last"

);

4750 auto

*RD = cast<CXXRecordDecl>(

D

);

4752 bool

HadRealDefinition =

4753

OldDD && (OldDD->Definition != RD ||

4754

!Reader.PendingFakeDefinitionData.count(OldDD));

4758

ReadCXXRecordDefinition(RD,

true

);

4761

uint64_t LexicalOffset = ReadLocalOffset();

4762 if

(!HadRealDefinition && LexicalOffset) {

4763 Record

.readLexicalDeclContextStorage(LexicalOffset, RD);

4764

Reader.PendingFakeDefinitionData.erase(OldDD);

4771

MSInfo->setTemplateSpecializationKind(TSK);

4772

MSInfo->setPointOfInstantiation(POI);

4774 auto

*Spec = cast<ClassTemplateSpecializationDecl>(RD);

4775

Spec->setTemplateSpecializationKind(TSK);

4776

Spec->setPointOfInstantiation(POI);

4778 if

(

Record

.readInt()) {

4780

readDeclAs<ClassTemplatePartialSpecializationDecl>();

4782 Record

.readTemplateArgumentList(TemplArgs);

4788 if

(!isa<ClassTemplatePartialSpecializationDecl *>(

4789

Spec->getSpecializedTemplateOrPartial()))

4790

Spec->setInstantiationOf(PartialSpec, TemplArgList);

4799 if

(

Record

.readInt()) {

4801 Record

.readAttributes(Attrs);

4813 auto

*Del = readDeclAs<FunctionDecl>();

4815 auto

*ThisArg =

Record

.readExpr();

4817 if

(!

First

->OperatorDelete) {

4818 First

->OperatorDelete = Del;

4819 First

->OperatorDeleteThisArg = ThisArg;

4826 auto

ESI =

Record

.readExceptionSpecInfo(ExceptionStorage);

4829 auto

*FD = cast<FunctionDecl>(

D

);

4835

FPT->getReturnType(), FPT->getParamTypes(),

4836

FPT->getExtProtoInfo().withExceptionSpec(ESI)));

4840

Reader.PendingExceptionSpecUpdates.insert(

4841

std::make_pair(FD->getCanonicalDecl(), FD));

4847 auto

*FD = cast<FunctionDecl>(

D

);

4849

Reader.PendingDeducedTypeUpdates.insert(

4850

{FD->getCanonicalDecl(), DeducedResultType});

4871

readSourceRange()));

4875 auto

AllocatorKind =

4876 static_cast<

OMPAllocateDeclAttr::AllocatorTypeTy

>

(

Record

.readInt());

4880 D

->

addAttr

(OMPAllocateDeclAttr::CreateImplicit(

4881

Reader.

getContext

(), AllocatorKind, Allocator, Alignment, SR));

4887 auto

*Exported = cast<NamedDecl>(

D

);

4890

Reader.PendingMergedDefinitionsToDeduplicate.insert(Exported);

4895 auto

MapType =

Record

.readEnum<OMPDeclareTargetDeclAttr::MapTypeTy>();

4896 auto

DevType =

Record

.readEnum<OMPDeclareTargetDeclAttr::DevTypeTy>();

4899 unsigned

Level =

Record

.readInt();

4900 D

->

addAttr

(OMPDeclareTargetDeclAttr::CreateImplicit(

4902

readSourceRange()));

4908 Record

.readAttributes(Attrs);

4909

assert(Attrs.size() == 1);

This file provides AST data structures related to concepts.

Defines the clang::ASTContext interface.

static T assert_cast(T t)

"Cast" to type T, asserting if we don't have an implicit conversion.

static bool allowODRLikeMergeInC(NamedDecl *ND)

ODR-like semantics for C/ObjC allow us to merge tag types and a structural check in Sema guarantees t...

static NamedDecl * getDeclForMerging(NamedDecl *Found, bool IsTypedefNameForLinkage)

Find the declaration that should be merged into, given the declaration found by name lookup.

static bool inheritDefaultTemplateArgument(ASTContext &Context, ParmDecl *From, Decl *ToD)

Inherit the default template argument from From to To.

static void inheritDefaultTemplateArguments(ASTContext &Context, TemplateDecl *From, TemplateDecl *To)

static void forAllLaterRedecls(DeclT *D, Fn F)

static llvm::iterator_range< MergedRedeclIterator< DeclT > > merged_redecls(DeclT *D)

Defines the clang::attr::Kind enum.

clang::CharUnits operator*(clang::CharUnits::QuantityType Scale, const clang::CharUnits &CU)

enum clang::sema::@1704::IndirectLocalPathEntry::EntryKind Kind

Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....

This file defines OpenMP nodes for declarative directives.

Defines the C++ template declaration subclasses.

Defines the ExceptionSpecificationType enumeration and various utility functions.

Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.

Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.

Defines the LambdaCapture class.

Defines several types used to describe C++ lambda expressions that are shared between the parser and ...

Defines the clang::LangOptions interface.

llvm::MachO::Record Record

Defines the clang::Module class, which describes a module in the source code.

This file defines OpenMP AST classes for clauses.

static std::string toString(const clang::SanitizerSet &Sanitizers)

Produce a string containing comma-separated names of sanitizers in Sanitizers set.

Defines the clang::SourceLocation class and associated facilities.

Defines various enumerations that describe declaration and type specifiers.

Defines utilities for dealing with stack allocation and stack space.

C Language Family Type Representation.

__DEVICE__ void * memcpy(void *__a, const void *__b, size_t __c)

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

bool needsCleanup() const

Returns whether the object performed allocations.

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

TranslationUnitDecl * getTranslationUnitDecl() const

void setInstantiatedFromUsingDecl(NamedDecl *Inst, NamedDecl *Pattern)

Remember that the using decl Inst is an instantiation of the using decl Pattern of a class template.

QualType getInjectedClassNameType(CXXRecordDecl *Decl, QualType TST) const

getInjectedClassNameType - Return the unique reference to the injected class name type for the specif...

void setInstantiatedFromUsingShadowDecl(UsingShadowDecl *Inst, UsingShadowDecl *Pattern)

const LangOptions & getLangOpts() const

void setInstantiatedFromUsingEnumDecl(UsingEnumDecl *Inst, UsingEnumDecl *Pattern)

Remember that the using enum decl Inst is an instantiation of the using enum decl Pattern of a class ...

void setStaticLocalNumber(const VarDecl *VD, unsigned Number)

void addOverriddenMethod(const CXXMethodDecl *Method, const CXXMethodDecl *Overridden)

Note that the given C++ Method overrides the given Overridden method.

void setManglingNumber(const NamedDecl *ND, unsigned Number)

void * Allocate(size_t Size, unsigned Align=8) const

TypeSourceInfo * CreateTypeSourceInfo(QualType T, unsigned Size=0) const

Allocate an uninitialized TypeSourceInfo.

void setInstantiatedFromStaticDataMember(VarDecl *Inst, VarDecl *Tmpl, TemplateSpecializationKind TSK, SourceLocation PointOfInstantiation=SourceLocation())

Note that the static data member Inst is an instantiation of the static data member template Tmpl of ...

QualType getFunctionType(QualType ResultTy, ArrayRef< QualType > Args, const FunctionProtoType::ExtProtoInfo &EPI) const

Return a normal function type with a typed argument list.

void setInstantiatedFromUnnamedFieldDecl(FieldDecl *Inst, FieldDecl *Tmpl)

void setBlockVarCopyInit(const VarDecl *VD, Expr *CopyExpr, bool CanThrow)

Set the copy initialization expression of a block var decl.

void addDestruction(T *Ptr) const

If T isn't trivially destructible, calls AddDeallocation to register it for destruction.

ExternalASTSource * getExternalSource() const

Retrieve a pointer to the external AST source associated with this AST context, if any.

void mergeDefinitionIntoModule(NamedDecl *ND, Module *M, bool NotifyListeners=true)

Note that the definition ND has been merged into module M, and should be visible whenever M is visibl...

void setPrimaryMergedDecl(Decl *D, Decl *Primary)

void setObjCMethodRedeclaration(const ObjCMethodDecl *MD, const ObjCMethodDecl *Redecl)

bool isInSameModule(const Module *M1, const Module *M2)

If the two module M1 and M2 are in the same module.

void mergeTemplatePattern(RedeclarableTemplateDecl *D, RedeclarableTemplateDecl *Existing, bool IsKeyDecl)

Merge together the pattern declarations from two template declarations.

ASTDeclMerger(ASTReader &Reader)

void mergeRedeclarable(Redeclarable< T > *D, T *Existing, RedeclarableResult &Redecl)

void mergeLambda(CXXRecordDecl *D, RedeclarableResult &Redecl, Decl &Context, unsigned Number)

Attempt to merge D with a previous declaration of the same lambda, which is found by its index within...

void MergeDefinitionData(CXXRecordDecl *D, struct CXXRecordDecl::DefinitionData &&NewDD)

void mergeRedeclarableImpl(Redeclarable< T > *D, T *Existing, GlobalDeclID KeyDeclID)

Attempts to merge the given declaration (D) with another declaration of the same entity.

void VisitTemplateParamObjectDecl(TemplateParamObjectDecl *D)

void VisitObjCImplementationDecl(ObjCImplementationDecl *D)

void mergeRedeclarableTemplate(RedeclarableTemplateDecl *D, RedeclarableResult &Redecl)

void VisitImportDecl(ImportDecl *D)

void VisitBindingDecl(BindingDecl *BD)

void VisitNamespaceDecl(NamespaceDecl *D)

void VisitTopLevelStmtDecl(TopLevelStmtDecl *D)

RedeclarableResult VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D)

void VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D)

void VisitUnresolvedUsingIfExistsDecl(UnresolvedUsingIfExistsDecl *D)

void ReadFunctionDefinition(FunctionDecl *FD)

void VisitLabelDecl(LabelDecl *LD)

void VisitObjCCategoryDecl(ObjCCategoryDecl *D)

void VisitUsingDirectiveDecl(UsingDirectiveDecl *D)

RedeclarableResult VisitClassTemplateSpecializationDeclImpl(ClassTemplateSpecializationDecl *D)

void VisitFunctionDecl(FunctionDecl *FD)

void VisitObjCMethodDecl(ObjCMethodDecl *D)

void VisitUsingShadowDecl(UsingShadowDecl *D)

void VisitVarTemplateSpecializationDecl(VarTemplateSpecializationDecl *D)

void VisitVarDecl(VarDecl *VD)

RedeclarableResult VisitRedeclarable(Redeclarable< T > *D)

void VisitMSGuidDecl(MSGuidDecl *D)

void VisitPragmaCommentDecl(PragmaCommentDecl *D)

void VisitRecordDecl(RecordDecl *RD)

void VisitLifetimeExtendedTemporaryDecl(LifetimeExtendedTemporaryDecl *D)

void VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D)

void VisitRequiresExprBodyDecl(RequiresExprBodyDecl *D)

void ReadVarDeclInit(VarDecl *VD)

static Decl * getMostRecentDeclImpl(Redeclarable< DeclT > *D)

void VisitNamespaceAliasDecl(NamespaceAliasDecl *D)

void VisitIndirectFieldDecl(IndirectFieldDecl *FD)

void VisitObjCContainerDecl(ObjCContainerDecl *D)

void VisitBlockDecl(BlockDecl *BD)

void VisitExportDecl(ExportDecl *D)

static void attachLatestDecl(Decl *D, Decl *latest)

void VisitStaticAssertDecl(StaticAssertDecl *D)

void VisitEmptyDecl(EmptyDecl *D)

void VisitOMPCapturedExprDecl(OMPCapturedExprDecl *D)

void VisitValueDecl(ValueDecl *VD)

void VisitEnumDecl(EnumDecl *ED)

void mergeRedeclarable(Redeclarable< T > *D, RedeclarableResult &Redecl)

Attempts to merge the given declaration (D) with another declaration of the same entity.

void VisitUnresolvedUsingTypenameDecl(UnresolvedUsingTypenameDecl *D)

void VisitFriendTemplateDecl(FriendTemplateDecl *D)

void VisitObjCProtocolDecl(ObjCProtocolDecl *D)

void VisitClassTemplatePartialSpecializationDecl(ClassTemplatePartialSpecializationDecl *D)

void VisitObjCTypeParamDecl(ObjCTypeParamDecl *D)

void VisitDeclaratorDecl(DeclaratorDecl *DD)

RedeclarableResult VisitTypedefNameDecl(TypedefNameDecl *TD)

void VisitFriendDecl(FriendDecl *D)

void VisitLinkageSpecDecl(LinkageSpecDecl *D)

void VisitCXXRecordDecl(CXXRecordDecl *D)

ASTDeclReader(ASTReader &Reader, ASTRecordReader &Record, ASTReader::RecordLocation Loc, GlobalDeclID thisDeclID, SourceLocation ThisDeclLoc)

void VisitFileScopeAsmDecl(FileScopeAsmDecl *AD)

void VisitImplicitConceptSpecializationDecl(ImplicitConceptSpecializationDecl *D)

void VisitNamedDecl(NamedDecl *ND)

void mergeMergeable(Mergeable< T > *D)

Attempts to merge the given declaration (D) with another declaration of the same entity,...

void VisitBuiltinTemplateDecl(BuiltinTemplateDecl *D)

static Decl * getMostRecentDecl(Decl *D)

void VisitObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *D)

void VisitCXXConstructorDecl(CXXConstructorDecl *D)

void VisitPragmaDetectMismatchDecl(PragmaDetectMismatchDecl *D)

void VisitImplicitParamDecl(ImplicitParamDecl *PD)

void VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D)

static void setNextObjCCategory(ObjCCategoryDecl *Cat, ObjCCategoryDecl *Next)

void VisitMSPropertyDecl(MSPropertyDecl *FD)

void VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D)

void VisitFieldDecl(FieldDecl *FD)

RedeclarableResult VisitVarDeclImpl(VarDecl *D)

void VisitOMPDeclareMapperDecl(OMPDeclareMapperDecl *D)

void VisitCapturedDecl(CapturedDecl *CD)

void VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D)

void VisitObjCInterfaceDecl(ObjCInterfaceDecl *D)

RedeclarableResult VisitCXXRecordDeclImpl(CXXRecordDecl *D)

void VisitAccessSpecDecl(AccessSpecDecl *D)

void VisitCXXMethodDecl(CXXMethodDecl *D)

void VisitOMPAllocateDecl(OMPAllocateDecl *D)

void VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D)

static void attachLatestDeclImpl(Redeclarable< DeclT > *D, Decl *Latest)

static void markIncompleteDeclChainImpl(Redeclarable< DeclT > *D)

RedeclarableResult VisitTagDecl(TagDecl *TD)

ObjCTypeParamList * ReadObjCTypeParamList()

void VisitHLSLBufferDecl(HLSLBufferDecl *D)

void VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D)

void VisitCXXDeductionGuideDecl(CXXDeductionGuideDecl *GD)

void VisitConstructorUsingShadowDecl(ConstructorUsingShadowDecl *D)

void VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D)

static void checkMultipleDefinitionInNamedModules(ASTReader &Reader, Decl *D, Decl *Previous)

void VisitUsingEnumDecl(UsingEnumDecl *D)

void VisitObjCImplDecl(ObjCImplDecl *D)

void VisitTranslationUnitDecl(TranslationUnitDecl *TU)

void VisitDeclContext(DeclContext *DC, uint64_t &LexicalOffset, uint64_t &VisibleOffset, uint64_t &ModuleLocalOffset, uint64_t &TULocalOffset)

void VisitUnnamedGlobalConstantDecl(UnnamedGlobalConstantDecl *D)

void VisitTypeDecl(TypeDecl *TD)

void VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D)

void VisitEnumConstantDecl(EnumConstantDecl *ECD)

void VisitTypeAliasDecl(TypeAliasDecl *TD)

static void attachPreviousDeclImpl(ASTReader &Reader, Redeclarable< DeclT > *D, Decl *Previous, Decl *Canon)

void VisitConceptDecl(ConceptDecl *D)

void VisitObjCPropertyDecl(ObjCPropertyDecl *D)

void VisitOutlinedFunctionDecl(OutlinedFunctionDecl *D)

void VisitObjCIvarDecl(ObjCIvarDecl *D)

void VisitUsingPackDecl(UsingPackDecl *D)

void VisitFunctionTemplateDecl(FunctionTemplateDecl *D)

void VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D)

RedeclarableResult VisitVarTemplateSpecializationDeclImpl(VarTemplateSpecializationDecl *D)

TODO: Unify with ClassTemplateSpecializationDecl version? May require unifying ClassTemplate(Partial)...

void VisitUsingDecl(UsingDecl *D)

void VisitObjCAtDefsFieldDecl(ObjCAtDefsFieldDecl *D)

void VisitVarTemplatePartialSpecializationDecl(VarTemplatePartialSpecializationDecl *D)

TODO: Unify with ClassTemplatePartialSpecializationDecl version? May require unifying ClassTemplate(P...

void VisitParmVarDecl(ParmVarDecl *PD)

void VisitVarTemplateDecl(VarTemplateDecl *D)

TODO: Unify with ClassTemplateDecl version? May require unifying ClassTemplateDecl and VarTemplateDec...

static void attachPreviousDecl(ASTReader &Reader, Decl *D, Decl *Previous, Decl *Canon)

void VisitClassTemplateDecl(ClassTemplateDecl *D)

void VisitCXXDestructorDecl(CXXDestructorDecl *D)

void VisitTemplateDecl(TemplateDecl *D)

void VisitCXXConversionDecl(CXXConversionDecl *D)

void VisitTypedefDecl(TypedefDecl *TD)

void VisitOMPRequiresDecl(OMPRequiresDecl *D)

RedeclarableResult VisitRecordDeclImpl(RecordDecl *RD)

void VisitDecompositionDecl(DecompositionDecl *DD)

void ReadSpecializations(ModuleFile &M, Decl *D, llvm::BitstreamCursor &DeclsCursor, bool IsPartial)

Reads an AST files chain containing the contents of a translation unit.

bool isDeclIDFromModule(GlobalDeclID ID, ModuleFile &M) const

Returns true if global DeclID ID originated from module M.

DiagnosticBuilder Diag(unsigned DiagID) const

Report a diagnostic.

ASTContext & getContext()

Retrieve the AST context that this AST reader supplements.

Decl * ReadDecl(ModuleFile &F, const RecordDataImpl &R, unsigned &I)

Reads a declaration from the given position in a record in the given module.

ModuleFile * getOwningModuleFile(const Decl *D) const

Retrieve the module file that owns the given declaration, or NULL if the declaration is not from a mo...

T * ReadDeclAs(ModuleFile &F, const RecordDataImpl &R, unsigned &I)

Reads a declaration from the given position in a record in the given module.

SourceLocation ReadSourceLocation(ModuleFile &MF, RawLocEncoding Raw, LocSeq *Seq=nullptr) const

Read a source location from raw form.

LocalDeclID mapGlobalIDToModuleFileGlobalID(ModuleFile &M, GlobalDeclID GlobalID)

Map a global declaration ID into the declaration ID used to refer to this declaration within the give...

QualType GetType(serialization::TypeID ID)

Resolve a type ID into a type, potentially building a new type.

IdentifierResolver & getIdResolver()

Get the identifier resolver used for name lookup / updates in the translation unit scope.

Decl * GetDecl(GlobalDeclID ID)

Resolve a declaration ID into a declaration, potentially building a new declaration.

Module * getSubmodule(serialization::SubmoduleID GlobalID)

Retrieve the submodule that corresponds to a global submodule ID.

void mergeDefinitionVisibility(NamedDecl *Def, NamedDecl *MergedDef)

Note that MergedDef is a redefinition of the canonical definition Def, so Def should be visible whene...

void runWithSufficientStackSpace(SourceLocation Loc, llvm::function_ref< void()> Fn)

SmallVector< uint64_t, 64 > RecordData

An object for streaming information from a record.

bool readBool()

Read a boolean value, advancing Idx.

std::string readString()

Read a string, advancing Idx.

void readAttributes(AttrVec &Attrs)

Reads attributes from the current stream position, advancing Idx.

T * readDeclAs()

Reads a declaration from the given position in the record, advancing Idx.

IdentifierInfo * readIdentifier()

ASTContext & getContext()

Retrieve the AST context that this AST reader supplements.

TypeSourceInfo * readTypeSourceInfo()

Reads a declarator info from the given record, advancing Idx.

SourceRange readSourceRange(LocSeq *Seq=nullptr)

Read a source range, advancing Idx.

OMPTraitInfo * readOMPTraitInfo()

Read an OMPTraitInfo object, advancing Idx.

VersionTuple readVersionTuple()

Read a version tuple, advancing Idx.

uint64_t readInt()

Returns the current value in this record, and advances to the next value.

Attr * readAttr()

Reads one attribute from the current stream position, advancing Idx.

Expr * readExpr()

Reads an expression.

SourceLocation readSourceLocation(LocSeq *Seq=nullptr)

Read a source location, advancing Idx.

Represents an access specifier followed by colon ':'.

static AccessSpecDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Attr - This represents one attribute.

Attr * clone(ASTContext &C) const

Syntax

The style used to specify an attribute.

@ AS_Keyword

__ptr16, alignas(...), etc.

A binding in a decomposition declaration.

static BindingDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

A simple helper class to unpack an integer to bits and consuming the bits in order.

uint32_t getNextBits(uint32_t Width)

A class which contains all the information about a particular captured value.

Represents a block literal declaration, which is like an unnamed FunctionDecl.

void setParams(ArrayRef< ParmVarDecl * > NewParamInfo)

void setDoesNotEscape(bool B=true)

void setSignatureAsWritten(TypeSourceInfo *Sig)

void setCanAvoidCopyToHeap(bool B=true)

void setIsConversionFromLambda(bool val=true)

void setBlockMissingReturnType(bool val=true)

static BlockDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

void setIsVariadic(bool value)

void setBody(CompoundStmt *B)

void setCaptures(ASTContext &Context, ArrayRef< Capture > Captures, bool CapturesCXXThis)

Represents the builtin template declaration which is used to implement __make_integer_seq and other b...

Represents a C++ constructor within a class.

static CXXConstructorDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, uint64_t AllocKind)

Represents a C++ conversion function within a class.

static CXXConversionDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents a C++ deduction guide declaration.

static CXXDeductionGuideDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents a C++ destructor within a class.

static CXXDestructorDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents a static or instance method of a struct/union/class.

static CXXMethodDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents a C++ struct/union/class.

CXXRecordDecl * getDefinition() const

static CXXRecordDecl * CreateDeserialized(const ASTContext &C, GlobalDeclID ID)

MemberSpecializationInfo * getMemberSpecializationInfo() const

If this class is an instantiation of a member class of a class template specialization,...

CXXRecordDecl * getCanonicalDecl() override

Retrieves the "canonical" declaration of the given declaration.

Represents the body of a CapturedStmt, and serves as its DeclContext.

static CapturedDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned NumParams)

void setContextParam(unsigned i, ImplicitParamDecl *P)

void setNothrow(bool Nothrow=true)

void setParam(unsigned i, ImplicitParamDecl *P)

Declaration of a class template.

static ClassTemplateDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Create an empty class template node.

static ClassTemplatePartialSpecializationDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents a class template specialization, which refers to a class template with a given set of temp...

static ClassTemplateSpecializationDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Declaration of a C++20 concept.

static ConceptDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

A reference to a concept and its template args, as it appears in the code.

Represents a shadow constructor declaration introduced into a class by a C++11 using-declaration that...

static ConstructorUsingShadowDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

static DeclAccessPair make(NamedDecl *D, AccessSpecifier AS)

The results of name lookup within a DeclContext.

DeclContext - This is used only as base class of specific decl types that can act as declaration cont...

void setHasExternalVisibleStorage(bool ES=true) const

State whether this DeclContext has external storage for declarations visible in this context.

bool isTranslationUnit() const

DeclContext * getRedeclContext()

getRedeclContext - Retrieve the context in which an entity conflicts with other entities of the same ...

DeclContext * getPrimaryContext()

getPrimaryContext - There may be many different declarations of the same entity (including forward de...

bool isFunctionOrMethod() const

DeclID getRawValue() const

A simple visitor class that helps create declaration visitors.

Decl - This represents one declaration (or definition), e.g.

Decl * getPreviousDecl()

Retrieve the previous declaration that declares the same entity as this declaration,...

Decl * getMostRecentDecl()

Retrieve the most recent declaration that declares the same entity as this declaration (which may be ...

ASTContext & getASTContext() const LLVM_READONLY

void setOwningModuleID(unsigned ID)

Set the owning module ID.

void setLocalExternDecl()

Changes the namespace of this declaration to reflect that it's a function-local extern declaration.

void setTopLevelDeclInObjCContainer(bool V=true)

void markUsed(ASTContext &C)

Mark the declaration used, in the sense of odr-use.

bool isCanonicalDecl() const

Whether this particular Decl is a canonical one.

Module * getOwningModule() const

Get the module that owns this declaration (for visibility purposes).

bool isFirstDecl() const

True if this is the first declaration in its redeclaration chain.

Module * getImportedOwningModule() const

Get the imported owning module, if this decl is from an imported (non-local) module.

ObjCDeclQualifier

ObjCDeclQualifier - 'Qualifiers' written next to the return and parameter types in method declaration...

bool isFromASTFile() const

Determine whether this declaration came from an AST file (such as a precompiled header or module) rat...

bool isTemplateParameter() const

isTemplateParameter - Determines whether this declaration is a template parameter.

bool isInvalidDecl() const

unsigned FromASTFile

Whether this declaration was loaded from an AST file.

void setAccess(AccessSpecifier AS)

SourceLocation getLocation() const

IdentifierNamespace

IdentifierNamespace - The different namespaces in which declarations may appear.

@ IDNS_Ordinary

Ordinary names.

@ IDNS_Type

Types, declared with 'struct foo', typedefs, etc.

@ IDNS_Tag

Tags, declared with 'struct foo;' and referenced with 'struct foo'.

bool isTemplateParameterPack() const

isTemplateParameter - Determines whether this declaration is a template parameter pack.

void setImplicit(bool I=true)

void setReferenced(bool R=true)

void setLocation(SourceLocation L)

DeclContext * getDeclContext()

void setCachedLinkage(Linkage L) const

void setDeclContext(DeclContext *DC)

setDeclContext - Set both the semantic and lexical DeclContext to DC.

DeclContext * getLexicalDeclContext()

getLexicalDeclContext - The declaration context where this Decl was lexically declared (LexicalDC).

virtual Decl * getCanonicalDecl()

Retrieves the "canonical" declaration of the given declaration.

ModuleOwnershipKind

The kind of ownership a declaration has, for visibility purposes.

@ VisibleWhenImported

This declaration has an owning module, and is visible when that module is imported.

@ Unowned

This declaration is not owned by a module.

@ ReachableWhenImported

This declaration has an owning module, and is visible to lookups that occurs within that module.

@ ModulePrivate

This declaration has an owning module, but is only visible to lookups that occur within that module.

@ Visible

This declaration has an owning module, but is globally visible (typically because its owning module i...

void setModuleOwnershipKind(ModuleOwnershipKind MOK)

Set whether this declaration is hidden from name lookup.

bool shouldEmitInExternalSource() const

Whether the definition of the declaration should be emitted in external sources.

void setVisibleDespiteOwningModule()

Set that this declaration is globally visible, even if it came from a module that is not visible.

The name of a declaration.

Selector getObjCSelector() const

Get the Objective-C selector stored in this declaration name.

Represents a ValueDecl that came out of a declarator.

void setInnerLocStart(SourceLocation L)

void setTypeSourceInfo(TypeSourceInfo *TI)

TypeSourceInfo * getTypeSourceInfo() const

A decomposition declaration.

static DecompositionDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned NumBindings)

Represents an empty-declaration.

static EmptyDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

An instance of this object exists for each enum constant that is defined.

static EnumConstantDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

void setInitExpr(Expr *E)

void setInitVal(const ASTContext &C, const llvm::APSInt &V)

MemberSpecializationInfo * getMemberSpecializationInfo() const

If this enumeration is an instantiation of a member enumeration of a class template specialization,...

void setFixed(bool Fixed=true)

True if this is an Objective-C, C++11, or Microsoft-style enumeration with a fixed underlying type.

void setIntegerType(QualType T)

Set the underlying integer type.

void setIntegerTypeSourceInfo(TypeSourceInfo *TInfo)

Set the underlying integer type source info.

static EnumDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

void setScoped(bool Scoped=true)

True if this tag declaration is a scoped enumeration.

void setPromotionType(QualType T)

Set the promotion type.

EnumDecl * getCanonicalDecl() override

Retrieves the "canonical" declaration of the given declaration.

void setScopedUsingClassTag(bool ScopedUCT=true)

If this tag declaration is a scoped enum, then this is true if the scoped enum was declared using the...

Represents a standard C++ module export declaration.

static ExportDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

This represents one expression.

Represents a member of a struct/union/class.

void setBitWidth(Expr *Width)

Set the bit-field width for this member.

static FieldDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

const VariableArrayType * CapturedVLAType

void setRParenLoc(SourceLocation L)

void setAsmString(StringLiteral *Asm)

static FileScopeAsmDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

FriendDecl - Represents the declaration of a friend entity, which can be a function,...

static FriendDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned FriendTypeNumTPLists)

Declaration of a friend template.

static FriendTemplateDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

static DefaultedOrDeletedFunctionInfo * Create(ASTContext &Context, ArrayRef< DeclAccessPair > Lookups, StringLiteral *DeletedMessage=nullptr)

Represents a function declaration or definition.

void setDescribedFunctionTemplate(FunctionTemplateDecl *Template)

FunctionTemplateDecl * getDescribedFunctionTemplate() const

Retrieves the function template that is described by this function declaration.

void setIsPureVirtual(bool P=true)

void setDefaultedOrDeletedInfo(DefaultedOrDeletedFunctionInfo *Info)

void setFriendConstraintRefersToEnclosingTemplate(bool V=true)

void setHasSkippedBody(bool Skipped=true)

static FunctionDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

void setUsesSEHTry(bool UST)

void setIsMultiVersion(bool V=true)

Sets the multiversion state for this declaration and all of its redeclarations.

void setHasWrittenPrototype(bool P=true)

State that this function has a written prototype.

bool isExplicitlyDefaulted() const

Whether this function is explicitly defaulted.

MemberSpecializationInfo * getMemberSpecializationInfo() const

If this function is an instantiation of a member function of a class template specialization,...

FunctionTemplateSpecializationInfo * getTemplateSpecializationInfo() const

If this function is actually a function template specialization, retrieve information about this func...

void setDefaultLoc(SourceLocation NewLoc)

void setInlineSpecified(bool I)

Set whether the "inline" keyword was specified for this function.

TemplatedKind

The kind of templated function a FunctionDecl can be.

@ TK_MemberSpecialization

@ TK_DependentNonTemplate

@ TK_FunctionTemplateSpecialization

@ TK_DependentFunctionTemplateSpecialization

TemplatedKind getTemplatedKind() const

What kind of templated function this is.

void setInstantiatedFromDecl(FunctionDecl *FD)

Specify that this function declaration was instantiated from a FunctionDecl FD.

bool isDeletedAsWritten() const

void setHasInheritedPrototype(bool P=true)

State that this function inherited its prototype from a previous declaration.

void setDependentTemplateSpecialization(ASTContext &Context, const UnresolvedSetImpl &Templates, const TemplateArgumentListInfo *TemplateArgs)

Specifies that this function declaration is actually a dependent function template specialization.

void setVirtualAsWritten(bool V)

State that this function is marked as virtual explicitly.

void setLateTemplateParsed(bool ILT=true)

State that this templated function will be late parsed.

void setImplicitlyInline(bool I=true)

Flag that this function is implicitly inline.

void setTrivialForCall(bool IT)

bool isDefaulted() const

Whether this function is defaulted.

void setIneligibleOrNotSelected(bool II)

void setConstexprKind(ConstexprSpecKind CSK)

void setDefaulted(bool D=true)

void setStorageClass(StorageClass SClass)

Sets the storage class as written in the source.

void setDeletedAsWritten(bool D=true, StringLiteral *Message=nullptr)

void setExplicitlyDefaulted(bool ED=true)

State that this function is explicitly defaulted.

void setHasImplicitReturnZero(bool IRZ)

State that falling off this function implicitly returns null/zero.

Represents a prototype with parameter type info, e.g.

ExceptionSpecificationType getExceptionSpecType() const

Get the kind of exception specification on this function.

Declaration of a template function.

static FunctionTemplateDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Create an empty function template node.

Provides information about a function template specialization, which is a FunctionDecl that has been ...

static FunctionTemplateSpecializationInfo * Create(ASTContext &C, FunctionDecl *FD, FunctionTemplateDecl *Template, TemplateSpecializationKind TSK, TemplateArgumentList *TemplateArgs, const TemplateArgumentListInfo *TemplateArgsAsWritten, SourceLocation POI, MemberSpecializationInfo *MSInfo)

void Profile(llvm::FoldingSetNodeID &ID)

FunctionDecl * getFunction() const

Retrieve the declaration of the function template specialization.

FunctionType - C99 6.7.5.3 - Function Declarators.

QualType getReturnType() const

HLSLBufferDecl - Represent a cbuffer or tbuffer declaration.

static HLSLBufferDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

One of these records is kept for each identifier that is lexed.

void setOutOfDate(bool OOD)

Set whether the information for this identifier is out of date with respect to the external source.

bool isOutOfDate() const

Determine whether the information for this identifier is out of date with respect to the external sou...

iterator - Iterate over the decls of a specified declaration name.

IdentifierResolver - Keeps track of shadowed decls on enclosing scopes.

iterator begin(DeclarationName Name)

Returns an iterator over decls with the name 'Name'.

bool tryAddTopLevelDecl(NamedDecl *D, DeclarationName Name)

Try to add the given declaration to the top level scope, if it (or a redeclaration of it) hasn't alre...

iterator end()

Returns the end iterator.

static ImplicitConceptSpecializationDecl * CreateDeserialized(const ASTContext &C, GlobalDeclID ID, unsigned NumTemplateArgs)

static ImplicitParamDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Describes a module import declaration, which makes the contents of the named module visible in the cu...

static ImportDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned NumLocations)

Create a new, deserialized module import declaration.

Represents a field injected from an anonymous union/struct into the parent scope.

static IndirectFieldDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

void setInherited(bool I)

Description of a constructor that was inherited from a base class.

Represents the declaration of a label.

static LabelDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Describes the capture of a variable or of this, or of a C++1y init-capture.

LambdaCaptureKind getCaptureKind() const

Determine the kind of capture.

Implicit declaration of a temporary that was materialized by a MaterializeTemporaryExpr and lifetime-...

unsigned getManglingNumber() const

static LifetimeExtendedTemporaryDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

ValueDecl * getExtendingDecl()

Represents a linkage specification.

static LinkageSpecDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents the results of name lookup.

An instance of this class represents the declaration of a property member.

static MSPropertyDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Provides information a specialization of a member of a class template, which may be a member function...

void setPointOfInstantiation(SourceLocation POI)

Set the first point of instantiation.

Provides common interface for the Decls that cannot be redeclared, but can be merged if the same decl...

Describes a module or submodule.

@ AllVisible

All of the names in this module are visible.

std::string Name

The name of this module.

bool isGlobalModule() const

Does this Module scope describe a fragment of the global module within some C++ module.

@ ModuleMapModule

This is a module that was defined by a module map and built out of header files.

bool isNamedModule() const

Does this Module is a named module of a standard named module?

Module * getTopLevelModule()

Retrieve the top-level module for this (sub)module, which may be this module.

This represents a decl that may have a name.

IdentifierInfo * getIdentifier() const

Get the identifier that names this declaration, if there is one.

bool isPlaceholderVar(const LangOptions &LangOpts) const

DeclarationName getDeclName() const

Get the actual, stored name of the declaration, which may be a special name.

void setDeclName(DeclarationName N)

Set the name of this declaration.

Represents a C++ namespace alias.

static NamespaceAliasDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represent a C++ namespace.

static NamespaceDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.

static NonTypeTemplateParmDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, bool HasTypeConstraint)

This represents '#pragma omp allocate ...' directive.

static OMPAllocateDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned NVars, unsigned NClauses)

Pseudo declaration for capturing expressions.

static OMPCapturedExprDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

This represents '#pragma omp declare mapper ...' directive.

static OMPDeclareMapperDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned N)

Creates deserialized declare mapper node.

This represents '#pragma omp declare reduction ...' directive.

static OMPDeclareReductionDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Create deserialized declare reduction node.

This represents '#pragma omp requires...' directive.

static OMPRequiresDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned N)

Create deserialized requires node.

This represents '#pragma omp threadprivate ...' directive.

static OMPThreadPrivateDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned N)

Helper data structure representing the traits in a match clause of an declare variant or metadirectiv...

Represents a field declaration created by an @defs(...).

static ObjCAtDefsFieldDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

ObjCCategoryDecl - Represents a category declaration.

void setProtocolList(ObjCProtocolDecl *const *List, unsigned Num, const SourceLocation *Locs, ASTContext &C)

setProtocolList - Set the list of protocols that this interface implements.

static ObjCCategoryDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

void setIvarLBraceLoc(SourceLocation Loc)

void setCategoryNameLoc(SourceLocation Loc)

void setIvarRBraceLoc(SourceLocation Loc)

bool IsClassExtension() const

ObjCCategoryImplDecl - An object of this class encapsulates a category @implementation declaration.

static ObjCCategoryImplDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

ObjCCompatibleAliasDecl - Represents alias of a class.

static ObjCCompatibleAliasDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

void setClassInterface(ObjCInterfaceDecl *D)

ObjCContainerDecl - Represents a container for method declarations.

void setAtStartLoc(SourceLocation Loc)

void setAtEndRange(SourceRange atEnd)

ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...

static ObjCImplementationDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents an ObjC class declaration.

void mergeClassExtensionProtocolList(ObjCProtocolDecl *const *List, unsigned Num, ASTContext &C)

mergeClassExtensionProtocolList - Merge class extension's protocol list into the protocol list for th...

ObjCIvarDecl * lookupInstanceVariable(IdentifierInfo *IVarName, ObjCInterfaceDecl *&ClassDeclared)

static ObjCInterfaceDecl * CreateDeserialized(const ASTContext &C, GlobalDeclID ID)

ObjCInterfaceDecl * getCanonicalDecl() override

Retrieves the canonical declaration of this Objective-C class.

ObjCIvarDecl - Represents an ObjC instance variable.

void setAccessControl(AccessControl ac)

void setNextIvar(ObjCIvarDecl *ivar)

ObjCInterfaceDecl * getContainingInterface()

Return the class interface that this ivar is logically contained in; this is either the interface whe...

void setSynthesize(bool synth)

static ObjCIvarDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

ObjCMethodDecl - Represents an instance or class method declaration.

void setSynthesizedAccessorStub(bool isSynthesizedAccessorStub)

void setObjCDeclQualifier(ObjCDeclQualifier QV)

void setDefined(bool isDefined)

void setSelfDecl(ImplicitParamDecl *SD)

void setReturnTypeSourceInfo(TypeSourceInfo *TInfo)

void setHasRedeclaration(bool HRD) const

void setIsRedeclaration(bool RD)

void setCmdDecl(ImplicitParamDecl *CD)

bool hasRedeclaration() const

True if redeclared in the same interface.

void setRelatedResultType(bool RRT=true)

Note whether this method has a related result type.

void setOverriding(bool IsOver)

void setPropertyAccessor(bool isAccessor)

void setDeclImplementation(ObjCImplementationControl ic)

void setReturnType(QualType T)

static ObjCMethodDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

void setHasSkippedBody(bool Skipped=true)

void setInstanceMethod(bool isInst)

void setVariadic(bool isVar)

Represents one property declaration in an Objective-C interface.

static ObjCPropertyDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

ObjCPropertyImplDecl - Represents implementation declaration of a property in a class or category imp...

static ObjCPropertyImplDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents an Objective-C protocol declaration.

static ObjCProtocolDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

ObjCProtocolDecl * getCanonicalDecl() override

Retrieves the canonical declaration of this Objective-C protocol.

Represents the declaration of an Objective-C type parameter.

static ObjCTypeParamDecl * CreateDeserialized(ASTContext &ctx, GlobalDeclID ID)

Stores a list of Objective-C type parameters for a parameterized class or a category/extension thereo...

static ObjCTypeParamList * create(ASTContext &ctx, SourceLocation lAngleLoc, ArrayRef< ObjCTypeParamDecl * > typeParams, SourceLocation rAngleLoc)

Create a new Objective-C type parameter list.

Represents a partial function definition.

static OutlinedFunctionDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned NumParams)

Represents a parameter to a function.

static ParmVarDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

void setUninstantiatedDefaultArg(Expr *arg)

void setScopeInfo(unsigned scopeDepth, unsigned parameterIndex)

void setObjCMethodScopeInfo(unsigned parameterIndex)

Represents a #pragma detect_mismatch line.

static PragmaDetectMismatchDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned NameValueSize)

A (possibly-)qualified type.

bool isNull() const

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

const Type * getTypePtrOrNull() const

Represents a struct/union/class.

unsigned getODRHash()

Get precomputed ODRHash or add a new one.

void setAnonymousStructOrUnion(bool Anon)

void setArgPassingRestrictions(RecordArgPassingKind Kind)

void setNonTrivialToPrimitiveCopy(bool V)

void setHasNonTrivialToPrimitiveCopyCUnion(bool V)

void setHasNonTrivialToPrimitiveDestructCUnion(bool V)

void setHasFlexibleArrayMember(bool V)

void setParamDestroyedInCallee(bool V)

void setNonTrivialToPrimitiveDestroy(bool V)

void setHasObjectMember(bool val)

void setHasVolatileMember(bool val)

void setHasNonTrivialToPrimitiveDefaultInitializeCUnion(bool V)

static RecordDecl * CreateDeserialized(const ASTContext &C, GlobalDeclID ID)

void setHasUninitializedExplicitInitFields(bool V)

void setNonTrivialToPrimitiveDefaultInitialize(bool V)

Declaration of a redeclarable template.

CommonBase * Common

Pointer to the common data shared by all declarations of this template.

virtual CommonBase * newCommon(ASTContext &C) const =0

Provides common interface for the Decls that can be redeclared.

decl_type * getPreviousDecl()

Return the previous declaration of this declaration or NULL if this is the first declaration.

bool isFirstDecl() const

True if this is the first declaration in its redeclaration chain.

static DeclLink PreviousDeclLink(decl_type *D)

Represents the body of a requires-expression.

static RequiresExprBodyDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

const FunctionDecl * getKernelEntryPointDecl() const

Encodes a location in the source.

A trivial tuple used to represent a source range.

Represents a C++11 static_assert declaration.

static StaticAssertDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

StringLiteral - This represents a string literal expression, e.g.

Represents the declaration of a struct/union/class/enum.

void setTagKind(TagKind TK)

void setCompleteDefinitionRequired(bool V=true)

True if this complete decl is required to be complete for some existing use.

void demoteThisDefinitionToDeclaration()

Mark a definition as a declaration and maintain information it was a definition.

bool isThisDeclarationADefinition() const

Return true if this declaration is a completion definition of the type.

void setEmbeddedInDeclarator(bool isInDeclarator)

True if this tag declaration is "embedded" (i.e., defined or declared for the very first time) in the...

bool isCompleteDefinition() const

Return true if this decl has its body fully specified.

TagDecl * getCanonicalDecl() override

Retrieves the "canonical" declaration of the given declaration.

void setFreeStanding(bool isFreeStanding=true)

True if this tag is free standing, e.g. "struct foo;".

void setBraceRange(SourceRange R)

void setCompleteDefinition(bool V=true)

True if this decl has its body fully specified.

A convenient class for passing around template argument information.

A template argument list.

static TemplateArgumentList * CreateCopy(ASTContext &Context, ArrayRef< TemplateArgument > Args)

Create a new template argument list that copies the given set of template arguments.

The base class of all kinds of template declarations (e.g., class, function, etc.).

NamedDecl * getTemplatedDecl() const

Get the underlying, templated declaration.

TemplateParameterList * getTemplateParameters() const

Get the list of template parameters.

A template parameter object.

Stores a list of template parameters for a TemplateDecl and its derived classes.

TemplateTemplateParmDecl - Declares a template template parameter, e.g., "T" in.

static TemplateTemplateParmDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Declaration of a template type parameter.

static TemplateTypeParmDecl * CreateDeserialized(const ASTContext &C, GlobalDeclID ID)

A declaration that models statements at global scope.

static TopLevelStmtDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

The top declaration context.

Represents the declaration of a typedef-name via a C++11 alias-declaration.

static TypeAliasDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

void setDescribedAliasTemplate(TypeAliasTemplateDecl *TAT)

Declaration of an alias template.

static TypeAliasTemplateDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Create an empty alias template node.

Represents a declaration of a type.

void setLocStart(SourceLocation L)

A container of type source information.

QualType getType() const

Return the type wrapped by this type source info.

const T * castAs() const

Member-template castAs<specific type>.

AutoType * getContainedAutoType() const

Get the AutoType whose type will be deduced for a variable with an initializer of this type.

DeducedType * getContainedDeducedType() const

Get the DeducedType whose type will be deduced for a variable with an initializer of this type.

const T * getAs() const

Member-template getAs<specific type>'.

Represents the declaration of a typedef-name via the 'typedef' type specifier.

static TypedefDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Base class for declarations which introduce a typedef-name.

void setModedTypeSourceInfo(TypeSourceInfo *unmodedTSI, QualType modedTy)

void setTypeSourceInfo(TypeSourceInfo *newType)

An artificial decl, representing a global anonymous constant value which is uniquified by value withi...

void addDecl(NamedDecl *D)

A set of unresolved declarations.

This node is generated when a using-declaration that was annotated with attribute((using_if_exists)) ...

static UnresolvedUsingIfExistsDecl * CreateDeserialized(ASTContext &Ctx, GlobalDeclID ID)

Represents a dependent using declaration which was marked with typename.

static UnresolvedUsingTypenameDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents a dependent using declaration which was not marked with typename.

static UnresolvedUsingValueDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents a C++ using-declaration.

static UsingDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents C++ using-directive.

static UsingDirectiveDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents a C++ using-enum-declaration.

static UsingEnumDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents a pack of using declarations that a single using-declarator pack-expanded into.

static UsingPackDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned NumExpansions)

Represents a shadow declaration implicitly introduced into a scope by a (resolved) using-declaration ...

static UsingShadowDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...

void setType(QualType newType)

Represents a variable declaration or definition.

ParmVarDeclBitfields ParmVarDeclBits

static VarDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

VarDeclBitfields VarDeclBits

EvaluatedStmt * ensureEvaluatedStmt() const

Convert the initializer for this declaration to the elaborated EvaluatedStmt form,...

NonParmVarDeclBitfields NonParmVarDeclBits

@ Definition

This declaration is definitely a definition.

void setDescribedVarTemplate(VarTemplateDecl *Template)

StorageClass getStorageClass() const

Returns the storage class as written in the source.

Declaration of a variable template.

static VarTemplateDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Create an empty variable template node.

static VarTemplatePartialSpecializationDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Represents a variable template specialization, which refers to a variable template with a given set o...

static VarTemplateSpecializationDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)

Source location and bit offset of a declaration.

RawLocEncoding getRawLoc() const

uint64_t getBitOffset(const uint64_t DeclTypesBlockStartOffset) const

Information about a module that has been loaded by the ASTReader.

const serialization::ObjCCategoriesInfo * ObjCCategoriesMap

Array of category list location information within this module file, sorted by the definition ID.

unsigned LocalNumObjCCategoriesInMap

The number of redeclaration info entries in ObjCCategoriesMap.

llvm::BitstreamCursor DeclsCursor

DeclsCursor - This is a cursor to the start of the DECLTYPES_BLOCK block.

uint64_t GlobalBitOffset

The global bit offset (or base) of this module.

const DeclOffset * DeclOffsets

Offset of each declaration within the bitstream, indexed by the declaration ID (-1).

unsigned Generation

The generation of which this module file is a part.

uint64_t DeclsBlockStartOffset

The offset to the start of the DECLTYPES_BLOCK block.

SmallVector< uint64_t, 1 > ObjCCategories

The Objective-C category lists for categories known to this module.

void visit(llvm::function_ref< bool(ModuleFile &M)> Visitor, llvm::SmallPtrSetImpl< ModuleFile * > *ModuleFilesHit=nullptr)

Visit each of the modules.

Class that performs name lookup into a DeclContext stored in an AST file.

const unsigned int LOCAL_REDECLARATIONS

Record code for a list of local redeclarations of a declaration.

DeclCode

Record codes for each kind of declaration.

const unsigned int DECL_UPDATES

Record of updates for a declaration that was modified after being deserialized.

@ DECL_EMPTY

An EmptyDecl record.

@ DECL_CAPTURED

A CapturedDecl record.

@ DECL_CXX_BASE_SPECIFIERS

A record containing CXXBaseSpecifiers.

@ DECL_CXX_RECORD

A CXXRecordDecl record.

@ DECL_VAR_TEMPLATE_PARTIAL_SPECIALIZATION

A VarTemplatePartialSpecializationDecl record.

@ DECL_OMP_ALLOCATE

An OMPAllocateDcl record.

@ DECL_MS_PROPERTY

A MSPropertyDecl record.

@ DECL_OMP_DECLARE_MAPPER

An OMPDeclareMapperDecl record.

@ DECL_TOP_LEVEL_STMT_DECL

A TopLevelStmtDecl record.

@ DECL_REQUIRES_EXPR_BODY

A RequiresExprBodyDecl record.

@ DECL_STATIC_ASSERT

A StaticAssertDecl record.

@ DECL_INDIRECTFIELD

A IndirectFieldDecl record.

@ DECL_TEMPLATE_TEMPLATE_PARM

A TemplateTemplateParmDecl record.

@ DECL_IMPORT

An ImportDecl recording a module import.

@ DECL_UNNAMED_GLOBAL_CONSTANT

A UnnamedGlobalConstantDecl record.

@ DECL_ACCESS_SPEC

An AccessSpecDecl record.

@ DECL_OBJC_TYPE_PARAM

An ObjCTypeParamDecl record.

@ DECL_OBJC_CATEGORY_IMPL

A ObjCCategoryImplDecl record.

@ DECL_ENUM_CONSTANT

An EnumConstantDecl record.

@ DECL_PARM_VAR

A ParmVarDecl record.

@ DECL_TYPEDEF

A TypedefDecl record.

@ DECL_EXPANDED_TEMPLATE_TEMPLATE_PARM_PACK

A TemplateTemplateParmDecl record that stores an expanded template template parameter pack.

@ DECL_HLSL_BUFFER

A HLSLBufferDecl record.

@ DECL_NAMESPACE_ALIAS

A NamespaceAliasDecl record.

@ DECL_TYPEALIAS

A TypeAliasDecl record.

@ DECL_FUNCTION_TEMPLATE

A FunctionTemplateDecl record.

@ DECL_MS_GUID

A MSGuidDecl record.

@ DECL_UNRESOLVED_USING_TYPENAME

An UnresolvedUsingTypenameDecl record.

@ DECL_CLASS_TEMPLATE_SPECIALIZATION

A ClassTemplateSpecializationDecl record.

@ DECL_FILE_SCOPE_ASM

A FileScopeAsmDecl record.

@ DECL_PARTIAL_SPECIALIZATIONS

@ DECL_CXX_CONSTRUCTOR

A CXXConstructorDecl record.

@ DECL_CXX_CONVERSION

A CXXConversionDecl record.

@ DECL_FIELD

A FieldDecl record.

@ DECL_LINKAGE_SPEC

A LinkageSpecDecl record.

@ DECL_CONTEXT_TU_LOCAL_VISIBLE

A record that stores the set of declarations that are only visible to the TU.

@ DECL_NAMESPACE

A NamespaceDecl record.

@ DECL_NON_TYPE_TEMPLATE_PARM

A NonTypeTemplateParmDecl record.

@ DECL_USING_PACK

A UsingPackDecl record.

@ DECL_FUNCTION

A FunctionDecl record.

@ DECL_USING_DIRECTIVE

A UsingDirecitveDecl record.

@ DECL_RECORD

A RecordDecl record.

@ DECL_CONTEXT_LEXICAL

A record that stores the set of declarations that are lexically stored within a given DeclContext.

@ DECL_OUTLINEDFUNCTION

A OutlinedFunctionDecl record.

@ DECL_BLOCK

A BlockDecl record.

@ DECL_UNRESOLVED_USING_VALUE

An UnresolvedUsingValueDecl record.

@ DECL_TYPE_ALIAS_TEMPLATE

A TypeAliasTemplateDecl record.

@ DECL_CXX_CTOR_INITIALIZERS

A record containing CXXCtorInitializers.

@ DECL_OBJC_CATEGORY

A ObjCCategoryDecl record.

@ DECL_VAR

A VarDecl record.

@ DECL_UNRESOLVED_USING_IF_EXISTS

An UnresolvedUsingIfExistsDecl record.

@ DECL_USING

A UsingDecl record.

@ DECL_OBJC_PROTOCOL

A ObjCProtocolDecl record.

@ DECL_TEMPLATE_TYPE_PARM

A TemplateTypeParmDecl record.

@ DECL_VAR_TEMPLATE_SPECIALIZATION

A VarTemplateSpecializationDecl record.

@ DECL_OBJC_IMPLEMENTATION

A ObjCImplementationDecl record.

@ DECL_LABEL

A LabelDecl record.

@ DECL_OBJC_COMPATIBLE_ALIAS

A ObjCCompatibleAliasDecl record.

@ DECL_CONSTRUCTOR_USING_SHADOW

A ConstructorUsingShadowDecl record.

@ DECL_USING_ENUM

A UsingEnumDecl record.

@ DECL_FRIEND_TEMPLATE

A FriendTemplateDecl record.

@ DECL_PRAGMA_DETECT_MISMATCH

A PragmaDetectMismatchDecl record.

@ DECL_EXPANDED_NON_TYPE_TEMPLATE_PARM_PACK

A NonTypeTemplateParmDecl record that stores an expanded non-type template parameter pack.

@ DECL_OBJC_AT_DEFS_FIELD

A ObjCAtDefsFieldDecl record.

@ DECL_IMPLICIT_PARAM

An ImplicitParamDecl record.

@ DECL_FRIEND

A FriendDecl record.

@ DECL_CXX_METHOD

A CXXMethodDecl record.

@ DECL_EXPORT

An ExportDecl record.

@ DECL_BINDING

A BindingDecl record.

@ DECL_PRAGMA_COMMENT

A PragmaCommentDecl record.

@ DECL_ENUM

An EnumDecl record.

@ DECL_CONTEXT_MODULE_LOCAL_VISIBLE

A record containing the set of declarations that are only visible from DeclContext in the same module...

@ DECL_DECOMPOSITION

A DecompositionDecl record.

@ DECL_OMP_DECLARE_REDUCTION

An OMPDeclareReductionDecl record.

@ DECL_OMP_THREADPRIVATE

An OMPThreadPrivateDecl record.

@ DECL_OBJC_METHOD

A ObjCMethodDecl record.

@ DECL_CXX_DESTRUCTOR

A CXXDestructorDecl record.

@ DECL_OMP_CAPTUREDEXPR

An OMPCapturedExprDecl record.

@ DECL_CLASS_TEMPLATE

A ClassTemplateDecl record.

@ DECL_USING_SHADOW

A UsingShadowDecl record.

@ DECL_CONCEPT

A ConceptDecl record.

@ DECL_CXX_DEDUCTION_GUIDE

A CXXDeductionGuideDecl record.

@ DECL_OMP_REQUIRES

An OMPRequiresDecl record.

@ DECL_OBJC_IVAR

A ObjCIvarDecl record.

@ DECL_OBJC_PROPERTY

A ObjCPropertyDecl record.

@ DECL_TEMPLATE_PARAM_OBJECT

A TemplateParamObjectDecl record.

@ DECL_OBJC_INTERFACE

A ObjCInterfaceDecl record.

@ DECL_VAR_TEMPLATE

A VarTemplateDecl record.

@ DECL_LIFETIME_EXTENDED_TEMPORARY

An LifetimeExtendedTemporaryDecl record.

@ DECL_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION

A ClassTemplatePartialSpecializationDecl record.

@ DECL_IMPLICIT_CONCEPT_SPECIALIZATION

An ImplicitConceptSpecializationDecl record.

@ DECL_CONTEXT_VISIBLE

A record that stores the set of declarations that are visible from a given DeclContext.

@ DECL_OBJC_PROPERTY_IMPL

A ObjCPropertyImplDecl record.

Defines the Linkage enumeration and various utility functions.

const internal::VariadicAllOfMatcher< Decl > decl

Matches declarations.

ComparisonCategoryResult Compare(const T &X, const T &Y)

Helper to compare two comparable types.

uint64_t TypeID

An ID number that refers to a type in an AST file.

uint32_t SubmoduleID

An ID number that refers to a submodule in a module file.

bool needsAnonymousDeclarationNumber(const NamedDecl *D)

Determine whether the given declaration needs an anonymous declaration number.

void numberAnonymousDeclsWithin(const DeclContext *DC, Fn Visit)

Visit each declaration within DC that needs an anonymous declaration number and call Visit with the d...

bool isPartOfPerModuleInitializer(const Decl *D)

Determine whether the given declaration will be included in the per-module initializer if it needs to...

@ UPD_CXX_RESOLVED_DTOR_DELETE

@ UPD_CXX_INSTANTIATED_DEFAULT_MEMBER_INITIALIZER

@ UPD_CXX_DEDUCED_RETURN_TYPE

@ UPD_CXX_ADDED_IMPLICIT_MEMBER

@ UPD_DECL_MARKED_OPENMP_DECLARETARGET

@ UPD_CXX_POINT_OF_INSTANTIATION

@ UPD_CXX_RESOLVED_EXCEPTION_SPEC

@ UPD_CXX_ADDED_FUNCTION_DEFINITION

@ UPD_DECL_MARKED_OPENMP_THREADPRIVATE

@ UPD_STATIC_LOCAL_NUMBER

@ UPD_CXX_INSTANTIATED_DEFAULT_ARGUMENT

@ UPD_ADDED_ATTR_TO_RECORD

@ UPD_DECL_MARKED_OPENMP_ALLOCATE

@ UPD_CXX_ADDED_ANONYMOUS_NAMESPACE

@ UPD_CXX_INSTANTIATED_CLASS_DEFINITION

@ UPD_CXX_ADDED_VAR_DEFINITION

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

SelectorLocationsKind

Whether all locations of the selector identifiers are in a "standard" position.

bool isUnresolvedExceptionSpec(ExceptionSpecificationType ESpecType)

ConstexprSpecKind

Define the kind of constexpr specifier.

LinkageSpecLanguageIDs

Represents the language in a linkage specification.

LazyOffsetPtr< Stmt, uint64_t, &ExternalASTSource::GetExternalDeclStmt > LazyDeclStmtPtr

A lazy pointer to a statement.

LambdaCaptureKind

The different capture forms in a lambda introducer.

@ LCK_ByCopy

Capturing by copy (a.k.a., by value)

@ LCK_ByRef

Capturing by reference.

@ LCK_VLAType

Capturing variable-length array type.

@ LCK_StarThis

Capturing the *this object by copy.

@ LCK_This

Capturing the *this object by reference.

OMPDeclareReductionInitKind

StorageClass

Storage classes.

Linkage

Describes the different kinds of linkage (C++ [basic.link], C99 6.2.2) that an entity may have.

@ None

No linkage, which means that the entity is unique and can only be referred to from within its scope.

@ Result

The result type of a method or function.

TagTypeKind

The kind of a tag type.

ObjCImplementationControl

RecordArgPassingKind

Enum that represents the different ways arguments are passed to and returned from function calls.

static bool isUndeducedReturnType(QualType T)

bool operator!=(CanQual< T > x, CanQual< U > y)

for(const auto &A :T->param_types())

const FunctionProtoType * T

DeductionCandidate

Only used by CXXDeductionGuideDecl.

bool shouldSkipCheckingODR(const Decl *D)

bool declaresSameEntity(const Decl *D1, const Decl *D2)

Determine whether two declarations declare the same entity.

TemplateSpecializationKind

Describes the kind of template specialization that a particular template specialization declaration r...

@ Interface

The "__interface" keyword introduces the elaborated-type-specifier.

@ Class

The "class" keyword introduces the elaborated-type-specifier.

@ Other

Other implicit parameter.

AccessSpecifier

A C++ access specifier (public, private, protected), plus the special value "none" which means differ...

Structure used to store a statement, the constant value to which it was evaluated (if any),...

bool HasConstantDestruction

Whether this variable is known to have constant destruction.

bool WasEvaluated

Whether this statement was already evaluated.

bool HasConstantInitialization

Whether this variable is known to have constant initialization.

Provides information about an explicit instantiation of a variable or class template.

SourceLocation ExternKeywordLoc

The location of the extern keyword.

Data that is common to all of the declarations of a given function template.

llvm::FoldingSetVector< FunctionTemplateSpecializationInfo > Specializations

The function template specializations for this function template, including explicit specializations ...

A struct with extended info about a syntactic name qualifier, to be used for the case of out-of-line ...

Helper class that saves the current stream position and then restores it when destroyed.

llvm::DenseSet< std::tuple< Decl *, Decl *, int > > NonEquivalentDeclSet

Store declaration pairs already found to be non-equivalent.

Describes the categories of an Objective-C class.


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