24#include "llvm/Bitstream/BitstreamWriter.h"
25#include "llvm/Support/ErrorHandling.h"
28using namespace serialization;
46 : Writer(Writer), Context(Context), Record(Writer, Record),
47 Code((serialization::
DeclCode)0), AbbrevToUse(0) {}
51 llvm::report_fatal_error(StringRef(
"unexpected declaration kind '") +
53 return Record.Emit(Code, AbbrevToUse);
172 Record.push_back(typeParams->
size());
173 for (
auto *typeParam : *typeParams) {
174 Record.AddDeclRef(typeParam);
184 llvm::MapVector<ModuleFile*, const Decl*> Firsts;
187 if (R->isFromASTFile())
189 else if (IncludeLocal)
192 for (
const auto &F : Firsts)
193 Record.AddDeclRef(F.second);
197 template <
typename EntryType>
206 return Common->PartialSpecializations;
212 template<
typename DeclTy>
214 auto *Common = D->getCommonPtr();
220 Common->LazySpecializations) {
221 D->LoadLazySpecializations();
222 assert(!Common->LazySpecializations);
226 if (
auto *LS = Common->LazySpecializations)
230 unsigned I = Record.size();
236 for (
auto &Entry : Common->Specializations)
241 for (
auto *D : Specs) {
242 assert(D->isCanonicalDecl() &&
"non-canonical decl in set");
245 Record.append(LazySpecializations.begin(), LazySpecializations.end());
248 Record[I] = Record.size() - I - 1;
269 Writer.DeclUpdates[Template].push_back(ASTWriter::DeclUpdate(
282 if (
auto *TInfo = DD->getTypeSourceInfo())
290 Record.
push_back(FD->doesThisDeclarationHaveABody());
291 if (FD->doesThisDeclarationHaveABody())
330 while (
auto *NS = dyn_cast<NamespaceDecl>(DC->getRedeclContext())) {
331 if (!NS->isFromASTFile())
333 Writer.UpdatedDeclContexts.insert(NS->getPrimaryContext());
334 if (!NS->isInlineNamespace())
336 DC = NS->getParent();
342 StringRef Arg = D->
getArg();
364 llvm_unreachable(
"Translation units aren't directly serialized");
414 static_assert(DeclContext::NumTagDeclBits == 10,
415 "You need to update the serializer after you change the "
422 if (!isa<CXXRecordDecl>(D))
429 if (D->hasExtInfo()) {
442 static_assert(DeclContext::NumEnumDeclBits == 20,
443 "You need to update the serializer after you change the "
459 Record.
AddDeclRef(MemberInfo->getInstantiatedFrom());
460 Record.
push_back(MemberInfo->getTemplateSpecializationKind());
489 static_assert(DeclContext::NumRecordDeclBits == 41,
490 "You need to update the serializer after you change the "
508 if (!isa<CXXRecordDecl>(D))
550 if (D->hasExtInfo()) {
551 DeclaratorDecl::ExtInfo *Info = D->getExtInfo();
553 Record.
AddStmt(Info->TrailingRequiresClause);
561 static_assert(DeclContext::NumFunctionDeclBits == 29,
562 "You need to update the serializer after you change the "
613 Record.
AddDeclRef(MemberInfo->getInstantiatedFrom());
614 Record.
push_back(MemberInfo->getTemplateSpecializationKind());
681 Record.
push_back(FDI->getUnqualifiedLookups().size());
699 uint64_t Kind =
static_cast<uint64_t
>(ES.
getKind());
700 Kind = Kind << 1 | static_cast<bool>(ES.
getExpr());
701 Record.push_back(Kind);
716 static_assert(DeclContext::NumObjCMethodDeclBits == 24,
717 "You need to update the serializer after you change the "
718 "ObjCMethodDeclBits");
723 bool HasBodyStuff = D->
getBody() !=
nullptr;
758 unsigned NumStoredSelLocs = D->getNumStoredSelLocs();
761 for (
unsigned i = 0; i != NumStoredSelLocs; ++i)
778 static_assert(DeclContext::NumObjCContainerDeclBits == 51,
779 "You need to update the serializer after you change the "
780 "ObjCContainerDeclBits");
797 ObjCInterfaceDecl::DefinitionData &
Data = D->data();
814 P =
Data.AllReferencedProtocols.begin(),
815 PEnd =
Data.AllReferencedProtocols.end();
822 Writer.ObjCClassesWithCategories.insert(D);
825 for (; Cat; Cat = Cat->getNextClassCategoryRaw())
938 Record.
push_back(D->NumIvarInitializers);
939 if (D->NumIvarInitializers)
962 FieldDecl::InitStorageKind ISK = D->InitStorage.getInt();
964 if (ISK == FieldDecl::ISK_CapturedVLAType)
1028 for (
const auto *
P : D->
chain())
1040 if (!isa<ParmVarDecl>(D)) {
1051 if (
const auto *IPD = dyn_cast<ImplicitParamDecl>(D))
1052 Record.
push_back(
static_cast<unsigned>(IPD->getParameterKind()));
1063 Record.
AddStmt(Init.getCopyExpr());
1064 if (Init.getCopyExpr())
1069 bool ModulesCodegen =
false;
1070 if (Writer.WritingModule &&
1078 (D->
hasAttr<DLLExportAttr>() &&
1079 Writer.Context->
getLangOpts().BuildingPCHWithObjectFile)) &&
1084 Writer.ModularCodegenDecls.push_back(Writer.
GetDeclRef(D));
1088 VarNotTemplate = 0, VarTemplate, StaticDataMemberSpecialization
1095 Record.
push_back(StaticDataMemberSpecialization);
1096 Record.
AddDeclRef(SpecInfo->getInstantiatedFrom());
1097 Record.
push_back(SpecInfo->getTemplateSpecializationKind());
1172 assert(!D->
getTSCSpec() &&
"PARM_VAR_DECL can't use TLS");
1174 &&
"PARM_VAR_DECL can't be demoted definition.");
1175 assert(D->
getAccess() ==
AS_none &&
"PARM_VAR_DECL can't be public/private");
1177 assert(D->
getPreviousDecl() ==
nullptr &&
"PARM_VAR_DECL can't be redecl");
1179 "PARM_VAR_DECL can't be static data member");
1241 for (
const auto &capture : D->
captures()) {
1245 if (capture.isByRef()) flags |= 1;
1246 if (capture.isNested()) flags |= 2;
1247 if (capture.hasCopyExpr()) flags |= 4;
1250 if (capture.hasCopyExpr()) Record.
AddStmt(capture.getCopyExpr());
1268 static_assert(DeclContext::NumLinkageSpecDeclBits == 4,
1269 "You need to update the serializer after you change the"
1270 "LinkageSpecDeclBits");
1312 if (
Parent->isFromASTFile() || isa<TranslationUnitDecl>(
Parent)) {
1313 Writer.DeclUpdates[
Parent].push_back(
1334 Record.
AddDeclRef(D->FirstUsingShadow.getPointer());
1345 Record.
AddDeclRef(D->FirstUsingShadow.getPointer());
1372 Record.
AddDeclRef(D->NominatedBaseClassShadowDecl);
1373 Record.
AddDeclRef(D->ConstructedBaseClassShadowDecl);
1416 CXXRecNotTemplate = 0, CXXRecTemplate, CXXRecMemberSpecialization
1423 Record.
push_back(CXXRecMemberSpecialization);
1424 Record.
AddDeclRef(MSInfo->getInstantiatedFrom());
1425 Record.
push_back(MSInfo->getTemplateSpecializationKind());
1467 static_assert(DeclContext::NumCXXConstructorDeclBits == 22,
1468 "You need to update the serializer after you change the "
1469 "CXXConstructorDeclBits");
1471 Record.
push_back(D->getTrailingAllocKind());
1474 Record.
AddDeclRef(Inherited.getShadowDecl());
1475 Record.
AddDeclRef(Inherited.getConstructor());
1502 Record.
push_back(!IdentifierLocs.empty());
1503 if (IdentifierLocs.empty()) {
1507 for (
unsigned I = 0, N = IdentifierLocs.size(); I != N; ++I)
1509 Record.
push_back(IdentifierLocs.size());
1527 bool hasFriendDecl = D->Friend.is<
NamedDecl*>();
1533 for (
unsigned i = 0; i < D->NumTPLists; ++i)
1669 llvm::PointerUnion<VarTemplateDecl *, VarTemplatePartialSpecializationDecl *>
1688 Record.
push_back(D->IsCompleteDefinition);
1847 static_assert(DeclContext::NumDeclContextBits == 13,
1848 "You need to update the serializer after you change the "
1851 Record.
AddOffset(Writer.WriteDeclContextLexicalBlock(Context, DC));
1852 Record.
AddOffset(Writer.WriteDeclContextVisibleBlock(Context, DC));
1856 assert(
IsLocalDecl(D) &&
"expected a local declaration");
1862 const Decl *&CacheEntry = FirstLocalDeclCache[Canon];
1869 return CacheEntry = D;
1872template <
typename T>
1875 T *MostRecent =
First->getMostRecentDecl();
1876 T *DAsT =
static_cast<T *
>(D);
1877 if (MostRecent !=
First) {
1879 "Not considered redeclarable?");
1886 if (DAsT == FirstLocal) {
1890 unsigned I = Record.
size();
1895 Record[I] = Record.
size() - I;
1903 if (!Prev->isFromASTFile())
1908 if (LocalRedecls.empty())
1961 static_assert(DeclContext::NumOMPDeclareReductionDeclBits == 2,
1962 "You need to update the serializer after you change the "
1963 "NumOMPDeclareReductionDeclBits");
1995void ASTWriter::WriteDeclAbbrevs() {
1996 using namespace llvm;
1998 std::shared_ptr<BitCodeAbbrev> Abv;
2001 Abv = std::make_shared<BitCodeAbbrev>();
2004 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2005 Abv->Add(BitCodeAbbrevOp(0));
2006 Abv->Add(BitCodeAbbrevOp(0));
2007 Abv->Add(BitCodeAbbrevOp(0));
2008 Abv->Add(BitCodeAbbrevOp(0));
2009 Abv->Add(BitCodeAbbrevOp(0));
2010 Abv->Add(BitCodeAbbrevOp(0));
2011 Abv->Add(BitCodeAbbrevOp(0));
2012 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2));
2013 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2014 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2016 Abv->Add(BitCodeAbbrevOp(0));
2017 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2018 Abv->Add(BitCodeAbbrevOp(0));
2020 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2022 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2023 Abv->Add(BitCodeAbbrevOp(0));
2024 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2026 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2027 Abv->Add(BitCodeAbbrevOp(0));
2029 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2030 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2031 DeclFieldAbbrev = Stream.EmitAbbrev(std::move(Abv));
2034 Abv = std::make_shared<BitCodeAbbrev>();
2037 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2038 Abv->Add(BitCodeAbbrevOp(0));
2039 Abv->Add(BitCodeAbbrevOp(0));
2040 Abv->Add(BitCodeAbbrevOp(0));
2041 Abv->Add(BitCodeAbbrevOp(0));
2042 Abv->Add(BitCodeAbbrevOp(0));
2043 Abv->Add(BitCodeAbbrevOp(0));
2044 Abv->Add(BitCodeAbbrevOp(0));
2045 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2));
2046 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2047 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2049 Abv->Add(BitCodeAbbrevOp(0));
2050 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2051 Abv->Add(BitCodeAbbrevOp(0));
2053 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2055 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2056 Abv->Add(BitCodeAbbrevOp(0));
2057 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2059 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2060 Abv->Add(BitCodeAbbrevOp(0));
2062 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2063 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2065 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2066 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2067 DeclObjCIvarAbbrev = Stream.EmitAbbrev(std::move(Abv));
2070 Abv = std::make_shared<BitCodeAbbrev>();
2073 Abv->Add(BitCodeAbbrevOp(0));
2075 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2076 Abv->Add(BitCodeAbbrevOp(0));
2077 Abv->Add(BitCodeAbbrevOp(0));
2078 Abv->Add(BitCodeAbbrevOp(0));
2079 Abv->Add(BitCodeAbbrevOp(0));
2080 Abv->Add(BitCodeAbbrevOp(0));
2081 Abv->Add(BitCodeAbbrevOp(0));
2082 Abv->Add(BitCodeAbbrevOp(0));
2083 Abv->Add(BitCodeAbbrevOp(
AS_none));
2084 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2085 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2087 Abv->Add(BitCodeAbbrevOp(0));
2088 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2089 Abv->Add(BitCodeAbbrevOp(0));
2091 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2092 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2094 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2095 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2096 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2097 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2098 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2099 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2100 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2101 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2102 Abv->Add(BitCodeAbbrevOp(0));
2104 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2105 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2106 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2107 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2108 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2109 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2110 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2111 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2112 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32));
2113 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2115 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2116 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2117 DeclEnumAbbrev = Stream.EmitAbbrev(std::move(Abv));
2120 Abv = std::make_shared<BitCodeAbbrev>();
2123 Abv->Add(BitCodeAbbrevOp(0));
2125 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2126 Abv->Add(BitCodeAbbrevOp(0));
2127 Abv->Add(BitCodeAbbrevOp(0));
2128 Abv->Add(BitCodeAbbrevOp(0));
2129 Abv->Add(BitCodeAbbrevOp(0));
2130 Abv->Add(BitCodeAbbrevOp(0));
2131 Abv->Add(BitCodeAbbrevOp(0));
2132 Abv->Add(BitCodeAbbrevOp(0));
2133 Abv->Add(BitCodeAbbrevOp(
AS_none));
2134 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2135 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2137 Abv->Add(BitCodeAbbrevOp(0));
2138 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2139 Abv->Add(BitCodeAbbrevOp(0));
2141 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2142 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2144 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2145 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2146 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2147 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2148 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2149 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2150 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2151 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2152 Abv->Add(BitCodeAbbrevOp(0));
2154 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2155 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2156 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2157 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2160 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2162 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2164 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2166 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2168 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2170 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2172 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2174 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2));
2176 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 26));
2179 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2180 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2181 DeclRecordAbbrev = Stream.EmitAbbrev(std::move(Abv));
2184 Abv = std::make_shared<BitCodeAbbrev>();
2187 Abv->Add(BitCodeAbbrevOp(0));
2189 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2190 Abv->Add(BitCodeAbbrevOp(0));
2191 Abv->Add(BitCodeAbbrevOp(0));
2192 Abv->Add(BitCodeAbbrevOp(0));
2193 Abv->Add(BitCodeAbbrevOp(0));
2194 Abv->Add(BitCodeAbbrevOp(0));
2195 Abv->Add(BitCodeAbbrevOp(0));
2196 Abv->Add(BitCodeAbbrevOp(0));
2197 Abv->Add(BitCodeAbbrevOp(
AS_none));
2198 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2199 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2201 Abv->Add(BitCodeAbbrevOp(0));
2202 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2203 Abv->Add(BitCodeAbbrevOp(0));
2205 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2207 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2208 Abv->Add(BitCodeAbbrevOp(0));
2209 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2211 Abv->Add(BitCodeAbbrevOp(0));
2212 Abv->Add(BitCodeAbbrevOp(0));
2213 Abv->Add(BitCodeAbbrevOp(0));
2214 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2215 Abv->Add(BitCodeAbbrevOp(0));
2216 Abv->Add(BitCodeAbbrevOp(0));
2217 Abv->Add(BitCodeAbbrevOp(0));
2219 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2220 Abv->Add(BitCodeAbbrevOp(0));
2221 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2222 Abv->Add(BitCodeAbbrevOp(0));
2223 Abv->Add(BitCodeAbbrevOp(0));
2224 Abv->Add(BitCodeAbbrevOp(0));
2225 Abv->Add(BitCodeAbbrevOp(0));
2227 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2228 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2229 DeclParmVarAbbrev = Stream.EmitAbbrev(std::move(Abv));
2232 Abv = std::make_shared<BitCodeAbbrev>();
2235 Abv->Add(BitCodeAbbrevOp(0));
2237 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2238 Abv->Add(BitCodeAbbrevOp(0));
2239 Abv->Add(BitCodeAbbrevOp(0));
2240 Abv->Add(BitCodeAbbrevOp(0));
2241 Abv->Add(BitCodeAbbrevOp(0));
2242 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2243 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2244 Abv->Add(BitCodeAbbrevOp(0));
2245 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2));
2246 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2247 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2249 Abv->Add(BitCodeAbbrevOp(0));
2250 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2251 Abv->Add(BitCodeAbbrevOp(0));
2253 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2254 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2256 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2257 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2258 DeclTypedefAbbrev = Stream.EmitAbbrev(std::move(Abv));
2261 Abv = std::make_shared<BitCodeAbbrev>();
2264 Abv->Add(BitCodeAbbrevOp(0));
2266 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2267 Abv->Add(BitCodeAbbrevOp(0));
2268 Abv->Add(BitCodeAbbrevOp(0));
2269 Abv->Add(BitCodeAbbrevOp(0));
2270 Abv->Add(BitCodeAbbrevOp(0));
2271 Abv->Add(BitCodeAbbrevOp(0));
2272 Abv->Add(BitCodeAbbrevOp(0));
2273 Abv->Add(BitCodeAbbrevOp(0));
2274 Abv->Add(BitCodeAbbrevOp(
AS_none));
2275 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2276 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2278 Abv->Add(BitCodeAbbrevOp(0));
2279 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2280 Abv->Add(BitCodeAbbrevOp(0));
2282 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2284 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2285 Abv->Add(BitCodeAbbrevOp(0));
2286 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2288 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2289 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2));
2290 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2));
2291 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2292 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2293 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2294 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2295 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2296 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2297 Abv->Add(BitCodeAbbrevOp(0));
2298 Abv->Add(BitCodeAbbrevOp(0));
2299 Abv->Add(BitCodeAbbrevOp(0));
2300 Abv->Add(BitCodeAbbrevOp(0));
2301 Abv->Add(BitCodeAbbrevOp(0));
2302 Abv->Add(BitCodeAbbrevOp(0));
2303 Abv->Add(BitCodeAbbrevOp(0));
2304 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2305 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2306 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2));
2308 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2309 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2310 DeclVarAbbrev = Stream.EmitAbbrev(std::move(Abv));
2313 Abv = std::make_shared<BitCodeAbbrev>();
2316 Abv->Add(BitCodeAbbrevOp(0));
2320 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2321 Abv->Add(BitCodeAbbrevOp(0));
2322 Abv->Add(BitCodeAbbrevOp(0));
2323 Abv->Add(BitCodeAbbrevOp(0));
2324 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2325 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2326 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2327 Abv->Add(BitCodeAbbrevOp(0));
2328 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2));
2329 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2330 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2333 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2334 Abv->Add(BitCodeAbbrevOp(0));
2336 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2338 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2339 Abv->Add(BitCodeAbbrevOp(0));
2340 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2342 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 11));
2343 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2344 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2345 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2346 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2347 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2348 Abv->Add(BitCodeAbbrevOp(0));
2349 Abv->Add(BitCodeAbbrevOp(1));
2350 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2351 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2352 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2353 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2354 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2355 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2356 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2357 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2));
2358 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2359 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2360 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2361 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2362 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2363 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2364 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2365 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2366 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32));
2375 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
2376 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2377 DeclCXXMethodAbbrev = Stream.EmitAbbrev(std::move(Abv));
2379 unsigned ExprDependenceBits = llvm::BitWidth<ExprDependence>;
2381 Abv = std::make_shared<BitCodeAbbrev>();
2385 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2386 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, ExprDependenceBits));
2387 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2388 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2390 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2391 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2392 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2393 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2394 Abv->Add(BitCodeAbbrevOp(0));
2395 Abv->Add(BitCodeAbbrevOp(0));
2396 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2397 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2398 DeclRefExprAbbrev = Stream.EmitAbbrev(std::move(Abv));
2401 Abv = std::make_shared<BitCodeAbbrev>();
2405 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2406 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, ExprDependenceBits));
2407 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2408 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2410 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2411 Abv->Add(BitCodeAbbrevOp(32));
2412 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2413 IntegerLiteralAbbrev = Stream.EmitAbbrev(std::move(Abv));
2416 Abv = std::make_shared<BitCodeAbbrev>();
2420 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2421 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, ExprDependenceBits));
2422 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2423 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2425 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2426 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2427 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2428 CharacterLiteralAbbrev = Stream.EmitAbbrev(std::move(Abv));
2431 Abv = std::make_shared<BitCodeAbbrev>();
2435 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
2436 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, ExprDependenceBits));
2437 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2438 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
2440 Abv->Add(BitCodeAbbrevOp(0));
2441 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2442 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 6));
2443 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
2445 ExprImplicitCastAbbrev = Stream.EmitAbbrev(std::move(Abv));
2447 Abv = std::make_shared<BitCodeAbbrev>();
2449 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob));
2450 DeclContextLexicalAbbrev = Stream.EmitAbbrev(std::move(Abv));
2452 Abv = std::make_shared<BitCodeAbbrev>();
2454 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob));
2455 DeclContextVisibleLookupAbbrev = Stream.EmitAbbrev(std::move(Abv));
2471 bool WritingModule) {
2477 if (isa<FileScopeAsmDecl, TopLevelStmtDecl, ObjCImplDecl>(D))
2495 assert(!D->
isFromASTFile() &&
"should not be emitting imported decl");
2502 assert(ID >= FirstDeclID &&
"invalid decl ID");
2515 unsigned Index =
ID - FirstDeclID;
2516 if (DeclOffsets.size() == Index)
2517 DeclOffsets.emplace_back(getAdjustedLocation(Loc),
Offset,
2518 DeclTypesBlockStartOffset);
2519 else if (DeclOffsets.size() < Index) {
2521 DeclOffsets.resize(Index+1);
2522 DeclOffsets[Index].setLocation(getAdjustedLocation(Loc));
2523 DeclOffsets[Index].setBitOffset(
Offset, DeclTypesBlockStartOffset);
2525 llvm_unreachable(
"declarations should be emitted in ID order");
2529 if (Loc.
isValid() &&
SM.isLocalSourceLocation(Loc))
2530 associateDeclWithFile(D, ID);
2535 EagerlyDeserializedDecls.push_back(ID);
2543 bool ModulesCodegen =
false;
2545 std::optional<GVALinkage>
Linkage;
2546 if (Writer->WritingModule &&
2555 if (Writer->Context->
getLangOpts().ModulesCodegen ||
2556 (FD->
hasAttr<DLLExportAttr>() &&
2557 Writer->Context->
getLangOpts().BuildingPCHWithObjectFile)) {
2561 if (!FD->
hasAttr<AlwaysInlineAttr>()) {
2569 Record->push_back(ModulesCodegen);
2571 Writer->ModularCodegenDecls.push_back(Writer->
GetDeclRef(FD));
2572 if (
auto *CD = dyn_cast<CXXConstructorDecl>(FD)) {
2573 Record->push_back(CD->getNumCtorInitializers());
2574 if (CD->getNumCtorInitializers())
static void addExplicitSpecifier(ExplicitSpecifier ES, ASTRecordWriter &Record)
static bool isRequiredDecl(const Decl *D, ASTContext &Context, bool WritingModule)
isRequiredDecl - Check if this is a "required" Decl, which must be seen by consumers of the AST.
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
Defines the C++ template declaration subclasses.
This file defines OpenMP AST classes for clauses.
Defines the SourceManager interface.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
SourceManager & getSourceManager()
NamedDecl * getInstantiatedFromUsingDecl(NamedDecl *Inst)
If the given using decl Inst is an instantiation of another (possibly unresolved) using decl,...
bool DeclMustBeEmitted(const Decl *D)
Determines if the decl can be CodeGen'ed or deserialized from PCH lazily, only when used; this is onl...
const CXXMethodDecl * getCurrentKeyFunction(const CXXRecordDecl *RD)
Get our current best idea for the key function of the given record decl, or nullptr if there isn't on...
const LangOptions & getLangOpts() const
FieldDecl * getInstantiatedFromUnnamedFieldDecl(FieldDecl *Field)
UsingEnumDecl * getInstantiatedFromUsingEnumDecl(UsingEnumDecl *Inst)
If the given using-enum decl Inst is an instantiation of another using-enum decl, return it.
GVALinkage GetGVALinkageForFunction(const FunctionDecl *FD) const
BlockVarCopyInit getBlockVarCopyInit(const VarDecl *VD) const
Get the copy initialization expression of the VarDecl VD, or nullptr if none exists.
const ObjCMethodDecl * getObjCMethodRedeclaration(const ObjCMethodDecl *MD) const
Get the duplicate declaration of a ObjCMethod in the same interface, or null if none exists.
GVALinkage GetGVALinkageForVariable(const VarDecl *VD) const
UsingShadowDecl * getInstantiatedFromUsingShadowDecl(UsingShadowDecl *Inst)
ExternalASTSource * getExternalSource() const
Retrieve a pointer to the external AST source associated with this AST context, if any.
void VisitBindingDecl(BindingDecl *D)
void VisitObjCTypeParamDecl(ObjCTypeParamDecl *D)
void VisitEmptyDecl(EmptyDecl *D)
void VisitCXXMethodDecl(CXXMethodDecl *D)
void VisitPragmaDetectMismatchDecl(PragmaDetectMismatchDecl *D)
void VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D)
void VisitOMPRequiresDecl(OMPRequiresDecl *D)
void VisitNamedDecl(NamedDecl *D)
RedeclarableTemplateDecl::SpecEntryTraits< EntryType >::DeclType * getSpecializationDecl(EntryType &T)
Get the specialization decl from an entry in the specialization list.
void VisitCXXDeductionGuideDecl(CXXDeductionGuideDecl *D)
void VisitOMPDeclareMapperDecl(OMPDeclareMapperDecl *D)
void VisitNamespaceDecl(NamespaceDecl *D)
void VisitOMPAllocateDecl(OMPAllocateDecl *D)
void VisitExportDecl(ExportDecl *D)
void VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D)
void VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D)
void VisitParmVarDecl(ParmVarDecl *D)
void VisitRedeclarable(Redeclarable< T > *D)
void VisitFriendDecl(FriendDecl *D)
void VisitDeclaratorDecl(DeclaratorDecl *D)
void VisitTemplateParamObjectDecl(TemplateParamObjectDecl *D)
void VisitConceptDecl(ConceptDecl *D)
void VisitObjCPropertyDecl(ObjCPropertyDecl *D)
void VisitBlockDecl(BlockDecl *D)
void VisitLabelDecl(LabelDecl *LD)
void VisitTemplateDecl(TemplateDecl *D)
void VisitImplicitConceptSpecializationDecl(ImplicitConceptSpecializationDecl *D)
void VisitCXXDestructorDecl(CXXDestructorDecl *D)
void VisitFieldDecl(FieldDecl *D)
void VisitRequiresExprBodyDecl(RequiresExprBodyDecl *D)
void VisitObjCContainerDecl(ObjCContainerDecl *D)
void RegisterTemplateSpecialization(const Decl *Template, const Decl *Specialization)
Ensure that this template specialization is associated with the specified template on reload.
void VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D)
void VisitVarTemplatePartialSpecializationDecl(VarTemplatePartialSpecializationDecl *D)
void VisitUnnamedGlobalConstantDecl(UnnamedGlobalConstantDecl *D)
void VisitCXXConversionDecl(CXXConversionDecl *D)
void VisitUsingShadowDecl(UsingShadowDecl *D)
void VisitValueDecl(ValueDecl *D)
void VisitIndirectFieldDecl(IndirectFieldDecl *D)
void VisitImplicitParamDecl(ImplicitParamDecl *D)
decltype(T::PartialSpecializations) & getPartialSpecializations(T *Common)
Get the list of partial specializations from a template's common ptr.
void VisitObjCProtocolDecl(ObjCProtocolDecl *D)
void VisitUsingDirectiveDecl(UsingDirectiveDecl *D)
void VisitFunctionTemplateDecl(FunctionTemplateDecl *D)
void VisitObjCCategoryDecl(ObjCCategoryDecl *D)
void VisitTopLevelStmtDecl(TopLevelStmtDecl *D)
void VisitLinkageSpecDecl(LinkageSpecDecl *D)
void VisitAccessSpecDecl(AccessSpecDecl *D)
void VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D)
void VisitLifetimeExtendedTemporaryDecl(LifetimeExtendedTemporaryDecl *D)
void VisitMSPropertyDecl(MSPropertyDecl *D)
void VisitUsingEnumDecl(UsingEnumDecl *D)
void VisitTypeDecl(TypeDecl *D)
void VisitClassTemplatePartialSpecializationDecl(ClassTemplatePartialSpecializationDecl *D)
void VisitEnumConstantDecl(EnumConstantDecl *D)
void VisitObjCIvarDecl(ObjCIvarDecl *D)
void VisitCapturedDecl(CapturedDecl *D)
void VisitOMPCapturedExprDecl(OMPCapturedExprDecl *D)
void VisitPragmaCommentDecl(PragmaCommentDecl *D)
void VisitRecordDecl(RecordDecl *D)
void VisitUnresolvedUsingIfExistsDecl(UnresolvedUsingIfExistsDecl *D)
void VisitTypedefDecl(TypedefDecl *D)
void VisitMSGuidDecl(MSGuidDecl *D)
void VisitTypedefNameDecl(TypedefNameDecl *D)
void VisitVarTemplateSpecializationDecl(VarTemplateSpecializationDecl *D)
void VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D)
void VisitUsingDecl(UsingDecl *D)
void VisitUnresolvedUsingTypenameDecl(UnresolvedUsingTypenameDecl *D)
void AddTemplateSpecializations(DeclTy *D)
void VisitClassScopeFunctionSpecializationDecl(ClassScopeFunctionSpecializationDecl *D)
void VisitConstructorUsingShadowDecl(ConstructorUsingShadowDecl *D)
void VisitObjCImplementationDecl(ObjCImplementationDecl *D)
void VisitFriendTemplateDecl(FriendTemplateDecl *D)
void VisitObjCMethodDecl(ObjCMethodDecl *D)
void VisitNamespaceAliasDecl(NamespaceAliasDecl *D)
void VisitVarTemplateDecl(VarTemplateDecl *D)
void VisitHLSLBufferDecl(HLSLBufferDecl *D)
void VisitObjCImplDecl(ObjCImplDecl *D)
void VisitObjCAtDefsFieldDecl(ObjCAtDefsFieldDecl *D)
void VisitVarDecl(VarDecl *D)
void VisitImportDecl(ImportDecl *D)
void VisitCXXRecordDecl(CXXRecordDecl *D)
void VisitCXXConstructorDecl(CXXConstructorDecl *D)
void VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D)
void VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D)
void VisitFileScopeAsmDecl(FileScopeAsmDecl *D)
void VisitClassTemplateDecl(ClassTemplateDecl *D)
void VisitFunctionDecl(FunctionDecl *D)
void VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D)
void VisitEnumDecl(EnumDecl *D)
void VisitTranslationUnitDecl(TranslationUnitDecl *D)
void VisitObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *D)
void VisitStaticAssertDecl(StaticAssertDecl *D)
void VisitDeclContext(DeclContext *DC)
Emit the DeclContext part of a declaration context decl.
void AddObjCTypeParamList(ObjCTypeParamList *typeParams)
Add an Objective-C type parameter list to the given record.
void VisitObjCInterfaceDecl(ObjCInterfaceDecl *D)
void VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D)
void AddFirstDeclFromEachModule(const Decl *D, bool IncludeLocal)
Add to the record the first declaration from each module file that provides a declaration of D.
void VisitUsingPackDecl(UsingPackDecl *D)
void VisitDecompositionDecl(DecompositionDecl *D)
ArrayRef< Decl > getPartialSpecializations(FunctionTemplateDecl::Common *)
ASTDeclWriter(ASTWriter &Writer, ASTContext &Context, ASTWriter::RecordDataImpl &Record)
void VisitTagDecl(TagDecl *D)
void VisitTypeAliasDecl(TypeAliasDecl *D)
void VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D)
ModuleFile * getOwningModuleFile(const Decl *D)
Retrieve the module file that owns the given declaration, or NULL if the declaration is not from a mo...
An object for streaming information to a record.
void AddDeclarationNameInfo(const DeclarationNameInfo &NameInfo)
void AddTemplateArgumentList(const TemplateArgumentList *TemplateArgs)
Emit a template argument list.
void AddFunctionDefinition(const FunctionDecl *FD)
Add a definition for the given function to the queue of statements to emit.
uint64_t Emit(unsigned Code, unsigned Abbrev=0)
Emit the record to the stream, followed by its substatements, and return its offset.
void AddAPValue(const APValue &Value)
Emit an APvalue.
void AddIdentifierRef(const IdentifierInfo *II)
Emit a reference to an identifier.
void AddStmt(Stmt *S)
Add the given statement or expression to the queue of statements to emit.
void AddDeclarationName(DeclarationName Name)
Emit a declaration name.
void AddSourceRange(SourceRange Range, LocSeq *Seq=nullptr)
Emit a source range.
void AddOffset(uint64_t BitOffset)
Add a bit offset into the record.
void AddTypeRef(QualType T)
Emit a reference to a type.
void AddSourceLocation(SourceLocation Loc, LocSeq *Seq=nullptr)
Emit a source location.
void push_back(uint64_t N)
Minimal vector-like interface.
void append(InputIterator begin, InputIterator end)
void AddTypeLoc(TypeLoc TL, LocSeq *Seq=nullptr)
Emits source location information for a type. Does not emit the type.
void AddCXXCtorInitializers(ArrayRef< CXXCtorInitializer * > CtorInits)
Emit a CXXCtorInitializer array.
void AddTemplateParameterList(const TemplateParameterList *TemplateParams)
Emit a template parameter list.
void AddTemplateArgument(const TemplateArgument &Arg)
Emit a template argument.
void AddDeclarationNameLoc(const DeclarationNameLoc &DNLoc, DeclarationName Name)
void AddTypeSourceInfo(TypeSourceInfo *TInfo)
Emits a reference to a declarator info.
void AddQualifierInfo(const QualifierInfo &Info)
void AddDeclRef(const Decl *D)
Emit a reference to a declaration.
void writeOMPChildren(OMPChildren *Data)
Writes data related to the OpenMP directives.
void AddAPSInt(const llvm::APSInt &Value)
Emit a signed integral value.
void AddString(StringRef Str)
Emit a string.
void AddAttributes(ArrayRef< const Attr * > Attrs)
Emit a list of attributes.
void AddASTTemplateArgumentListInfo(const ASTTemplateArgumentListInfo *ASTTemplArgList)
Emits an AST template argument list info.
void AddCXXDefinitionData(const CXXRecordDecl *D)
void AddVarDeclInit(const VarDecl *VD)
Emit information about the initializer of a VarDecl.
void AddTemplateArgumentLoc(const TemplateArgumentLoc &Arg)
Emits a template argument location.
void AddNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS)
Emit a nested name specifier with source-location information.
Writes an AST file containing the contents of a translation unit.
unsigned getDeclParmVarAbbrev() const
unsigned getDeclObjCIvarAbbrev() const
serialization::DeclID GetDeclRef(const Decl *D)
Force a declaration to be emitted and get its ID.
unsigned getDeclTypedefAbbrev() const
unsigned getDeclVarAbbrev() const
unsigned getDeclEnumAbbrev() const
bool IsLocalDecl(const Decl *D)
Is this a local declaration (that is, one that will be written to our AST file)? This is the case for...
void ClearSwitchCaseIDs()
unsigned getDeclCXXMethodAbbrev() const
const Decl * getFirstLocalDecl(const Decl *D)
Find the first local declaration of a given local redeclarable decl.
SmallVector< uint64_t, 64 > RecordData
unsigned getAnonymousDeclarationNumber(const NamedDecl *D)
unsigned getDeclFieldAbbrev() const
unsigned getDeclRecordAbbrev() const
Represents an access specifier followed by colon ':'.
SourceLocation getColonLoc() const
The location of the colon following the access specifier.
A binding in a decomposition declaration.
Expr * getBinding() const
Get the expression to which this declaration is bound.
Represents a block literal declaration, which is like an unnamed FunctionDecl.
unsigned getNumCaptures() const
Returns the number of captured variables.
bool canAvoidCopyToHeap() const
size_t param_size() const
Stmt * getBody() const override
getBody - If this Decl represents a declaration for a body of code, such as a function or method defi...
ArrayRef< Capture > captures() const
bool blockMissingReturnType() const
bool capturesCXXThis() const
bool doesNotEscape() const
bool isConversionFromLambda() const
ArrayRef< ParmVarDecl * > parameters() const
TypeSourceInfo * getSignatureAsWritten() const
Represents a C++ constructor within a class.
ExplicitSpecifier getExplicitSpecifier()
InheritedConstructor getInheritedConstructor() const
Get the constructor that this inheriting constructor is based on.
Represents a C++ conversion function within a class.
ExplicitSpecifier getExplicitSpecifier()
Represents a C++ deduction guide declaration.
ExplicitSpecifier getExplicitSpecifier()
bool isCopyDeductionCandidate() const
Represents a C++ destructor within a class.
const FunctionDecl * getOperatorDelete() const
Expr * getOperatorDeleteThisArg() const
Represents a static or instance method of a struct/union/class.
CXXMethodDecl * getMostRecentDecl()
overridden_method_range overridden_methods() const
unsigned size_overridden_methods() const
Represents a C++ struct/union/class.
ClassTemplateDecl * getDescribedClassTemplate() const
Retrieves the class template that is described by this class declaration.
static bool classofKind(Kind K)
MemberSpecializationInfo * getMemberSpecializationInfo() const
If this class is an instantiation of a member class of a class template specialization,...
CXXRecordDecl * getPreviousDecl()
Represents the body of a CapturedStmt, and serves as its DeclContext.
unsigned getNumParams() const
unsigned getContextParamPosition() const
ImplicitParamDecl * getParam(unsigned i) const
Declaration of a function specialization at template class scope.
CXXMethodDecl * getSpecialization() const
bool hasExplicitTemplateArgs() const
const ASTTemplateArgumentListInfo * getTemplateArgsAsWritten() const
Declaration of a class template.
ClassTemplateDecl * getCanonicalDecl() override
Retrieves the canonical declaration of this template.
ClassTemplatePartialSpecializationDecl * getInstantiatedFromMember() const
Retrieve the member class template partial specialization from which this particular class template p...
bool isMemberSpecialization()
Determines whether this class template partial specialization template was a specialization of a memb...
const ASTTemplateArgumentListInfo * getTemplateArgsAsWritten() const
Get the template arguments as written.
TemplateParameterList * getTemplateParameters() const
Get the list of template parameters.
Represents a class template specialization, which refers to a class template with a given set of temp...
TemplateSpecializationKind getSpecializationKind() const
Determine the kind of specialization that this declaration represents.
ClassTemplateDecl * getSpecializedTemplate() const
Retrieve the template that this specialization specializes.
SourceLocation getExternLoc() const
Gets the location of the extern keyword, if present.
llvm::PointerUnion< ClassTemplateDecl *, ClassTemplatePartialSpecializationDecl * > getSpecializedTemplateOrPartial() const
Retrieve the class template or class template partial specialization which was specialized by this.
SourceLocation getPointOfInstantiation() const
Get the point of instantiation (if any), or null if none.
TypeSourceInfo * getTypeAsWritten() const
Gets the type of this specialization as it was written by the user, if it was so written.
const TemplateArgumentList & getTemplateArgs() const
Retrieve the template arguments of the class template specialization.
SourceLocation getTemplateKeywordLoc() const
Gets the location of the template keyword, if present.
const TemplateArgumentList & getTemplateInstantiationArgs() const
Retrieve the set of template arguments that should be used to instantiate members of the class templa...
Declaration of a C++20 concept.
Expr * getConstraintExpr() const
const NestedNameSpecifierLoc & getNestedNameSpecifierLoc() const
const DeclarationNameInfo & getConceptNameInfo() const
ConceptDecl * getNamedConcept() const
const ASTTemplateArgumentListInfo * getTemplateArgsAsWritten() const
Represents a shadow constructor declaration introduced into a class by a C++11 using-declaration that...
A POD class for pairing a NamedDecl* with an access specifier.
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
DeclContext * getParent()
getParent - Returns the containing DeclContext.
bool isDependentContext() const
Determines whether this context is dependent on a template parameter.
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...
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 ...
SourceLocation getEndLoc() const LLVM_READONLY
bool isImplicit() const
isImplicit - Indicates whether the declaration was implicitly generated by the implementation.
virtual bool isOutOfLine() const
Determine whether this declaration is declared out of line (outside its semantic context).
ModuleOwnershipKind getModuleOwnershipKind() const
Get the kind of module ownership for this declaration.
bool isReferenced() const
Whether any declaration of this entity was referenced.
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 isFromASTFile() const
Determine whether this declaration came from an AST file (such as a precompiled header or module) rat...
bool isInvalidDecl() const
unsigned getIdentifierNamespace() const
SourceLocation getLocation() const
const char * getDeclKindName() const
bool isTopLevelDeclInObjCContainer() const
Whether this declaration is a top-level declaration (function, global variable, etc....
bool isUsed(bool CheckUsedAttr=true) const
Whether any (re-)declaration of the entity was used, meaning that a definition is required.
DeclContext * getDeclContext()
AccessSpecifier getAccess() const
SourceLocation getBeginLoc() const LLVM_READONLY
DeclContext * getLexicalDeclContext()
getLexicalDeclContext - The declaration context where this Decl was lexically declared (LexicalDC).
virtual Decl * getCanonicalDecl()
Retrieves the "canonical" declaration of the given declaration.
NameKind getNameKind() const
Determine what kind of name this is.
Represents a ValueDecl that came out of a declarator.
SourceLocation getInnerLocStart() const
Return start of source range ignoring outer template declarations.
TypeSourceInfo * getTypeSourceInfo() const
A decomposition declaration.
ArrayRef< BindingDecl * > bindings() const
Provides information about a dependent function-template specialization declaration.
unsigned getNumTemplates() const
Returns the number of function templates that this might be a specialization of.
const TemplateArgumentLoc & getTemplateArg(unsigned I) const
Returns the nth template argument.
SourceLocation getRAngleLoc() const
unsigned getNumTemplateArgs() const
Returns the number of explicit template arguments that were given.
FunctionTemplateDecl * getTemplate(unsigned I) const
Returns the i'th template candidate.
SourceLocation getLAngleLoc() const
Represents an empty-declaration.
An instance of this object exists for each enum constant that is defined.
const Expr * getInitExpr() const
const llvm::APSInt & getInitVal() const
MemberSpecializationInfo * getMemberSpecializationInfo() const
If this enumeration is an instantiation of a member enumeration of a class template specialization,...
bool isScoped() const
Returns true if this is a C++11 scoped enumeration.
unsigned getNumNegativeBits() const
Returns the width in bits required to store all the negative enumerators of this enum.
bool isScopedUsingClassTag() const
Returns true if this is a C++11 scoped enumeration.
TypeSourceInfo * getIntegerTypeSourceInfo() const
Return the type source info for the underlying integer type, if no type source info exists,...
EnumDecl * getMostRecentDecl()
bool isFixed() const
Returns true if this is an Objective-C, C++11, or Microsoft-style enumeration with a fixed underlying...
QualType getIntegerType() const
Return the integer type this enum decl corresponds to.
unsigned getNumPositiveBits() const
Returns the width in bits required to store all the non-negative enumerators of this enum.
QualType getPromotionType() const
Return the integer type that enumerators should promote to.
Store information needed for an explicit specifier.
ExplicitSpecKind getKind() const
const Expr * getExpr() const
Represents a standard C++ module export declaration.
SourceLocation getRBraceLoc() const
This represents one expression.
Represents a member of a struct/union/class.
bool isMutable() const
Determines whether this field is mutable (C++ only).
bool hasInClassInitializer() const
Determine whether this member has a C++11 default member initializer.
Expr * getInClassInitializer() const
Get the C++11 default member initializer for this member, or null if one has not been set.
bool hasCapturedVLAType() const
Determine whether this member captures the variable length array type.
Expr * getBitWidth() const
const VariableArrayType * getCapturedVLAType() const
Get the captured variable length array type.
const StringLiteral * getAsmString() const
SourceLocation getRParenLoc() const
FriendDecl - Represents the declaration of a friend entity, which can be a function,...
TemplateParameterList * getFriendTypeTemplateParameterList(unsigned N) const
NamedDecl * getFriendDecl() const
If this friend declaration doesn't name a type, return the inner declaration.
TypeSourceInfo * getFriendType() const
If this friend declaration names an (untemplated but possibly dependent) type, return the type; other...
Declaration of a friend template.
SourceLocation getFriendLoc() const
Retrieves the location of the 'friend' keyword.
NamedDecl * getFriendDecl() const
If this friend declaration names a templated function (or a member function of a templated type),...
TemplateParameterList * getTemplateParameterList(unsigned i) const
unsigned getNumTemplateParameters() const
TypeSourceInfo * getFriendType() const
If this friend declaration names a templated type (or a dependent member type of a templated type),...
Represents a function declaration or definition.
bool isMultiVersion() const
True if this function is considered a multiversioned function.
Stmt * getBody(const FunctionDecl *&Definition) const
Retrieve the body (definition) of the function.
bool isTrivialForCall() const
bool isPure() const
Whether this virtual function is pure, i.e.
ConstexprSpecKind getConstexprKind() const
FunctionTemplateDecl * getDescribedFunctionTemplate() const
Retrieves the function template that is described by this function declaration.
bool isInlined() const
Determine whether this function should be inlined, because it is either marked "inline" or "constexpr...
SourceLocation getDefaultLoc() const
bool usesSEHTry() const
Indicates the function uses __try.
ArrayRef< ParmVarDecl * > parameters() const
bool isExplicitlyDefaulted() const
Whether this function is explicitly defaulted.
bool isTrivial() const
Whether this function is "trivial" in some specialized C++ senses.
bool hasWrittenPrototype() const
Whether this function has a written prototype.
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...
bool doesThisDeclarationHaveABody() const
Returns whether this specific declaration of the function has a body.
DependentFunctionTemplateSpecializationInfo * getDependentSpecializationInfo() const
unsigned getODRHash()
Returns ODRHash of the function.
@ TK_MemberSpecialization
@ TK_DependentNonTemplate
@ TK_FunctionTemplateSpecialization
@ TK_DependentFunctionTemplateSpecialization
StorageClass getStorageClass() const
Returns the storage class as written in the source.
bool FriendConstraintRefersToEnclosingTemplate() const
TemplatedKind getTemplatedKind() const
What kind of templated function this is.
bool isLateTemplateParsed() const
Whether this templated function will be late parsed.
bool hasImplicitReturnZero() const
Whether falling off this function implicitly returns null/zero.
bool hasSkippedBody() const
True if the function was a definition but its body was skipped.
bool isDefaulted() const
Whether this function is defaulted.
bool isIneligibleOrNotSelected() const
FunctionDecl * getInstantiatedFromDecl() const
DefaultedFunctionInfo * getDefaultedFunctionInfo() const
bool isVirtualAsWritten() const
Whether this function is marked as virtual explicitly.
bool hasInheritedPrototype() const
Whether this function inherited its prototype from a previous declaration.
size_t param_size() const
bool isInlineSpecified() const
Determine whether the "inline" keyword was specified for this function.
Declaration of a template function.
FunctionTemplateDecl * getCanonicalDecl() override
Retrieves the canonical declaration of this template.
Provides information about a function template specialization, which is a FunctionDecl that has been ...
const TemplateArgumentList * TemplateArguments
The template arguments used to produce the function template specialization from the function templat...
FunctionTemplateDecl * getTemplate() const
Retrieve the template from which this function was specialized.
MemberSpecializationInfo * getMemberSpecializationInfo() const
Get the specialization info if this function template specialization is also a member specialization:
const ASTTemplateArgumentListInfo * TemplateArgumentsAsWritten
The template arguments as written in the sources, if provided.
SourceLocation getPointOfInstantiation() const
Retrieve the first point of instantiation of this function template specialization.
TemplateSpecializationKind getTemplateSpecializationKind() const
Determine what kind of template specialization this is.
HLSLBufferDecl - Represent a cbuffer or tbuffer declaration.
SourceLocation getLBraceLoc() const
SourceLocation getLocStart() const LLVM_READONLY
SourceLocation getRBraceLoc() const
ArrayRef< TemplateArgument > getTemplateArguments() const
Describes a module import declaration, which makes the contents of the named module visible in the cu...
ArrayRef< SourceLocation > getIdentifierLocs() const
Retrieves the locations of each of the identifiers that make up the complete module name in the impor...
Module * getImportedModule() const
Retrieve the module that was imported by the import declaration.
Represents a field injected from an anonymous union/struct into the parent scope.
unsigned getChainingSize() const
ArrayRef< NamedDecl * > chain() const
Represents the declaration of a label.
Implicit declaration of a temporary that was materialized by a MaterializeTemporaryExpr and lifetime-...
unsigned getManglingNumber() const
APValue * getValue() const
Expr * getTemporaryExpr()
Retrieve the expression to which the temporary materialization conversion was applied.
ValueDecl * getExtendingDecl()
Represents a linkage specification.
SourceLocation getExternLoc() const
LanguageIDs getLanguage() const
Return the language specified by this linkage specification.
SourceLocation getRBraceLoc() const
Parts getParts() const
Get the decomposed parts of this declaration.
An instance of this class represents the declaration of a property member.
IdentifierInfo * getGetterId() const
IdentifierInfo * getSetterId() const
Provides information a specialization of a member of a class template, which may be a member function...
TemplateSpecializationKind getTemplateSpecializationKind() const
Determine what kind of template specialization this is.
SourceLocation getPointOfInstantiation() const
Retrieve the first point of instantiation of this member.
NamedDecl * getInstantiatedFrom() const
Retrieve the member declaration from which this member was instantiated.
bool isInterfaceOrPartition() const
This represents a decl that may have a name.
bool isModulePrivate() const
Whether this declaration was marked as being private to the module in which it was defined.
Linkage getLinkageInternal() const
Determine what kind of linkage this entity has.
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
NamedDecl * getMostRecentDecl()
Represents a C++ namespace alias.
NestedNameSpecifierLoc getQualifierLoc() const
Retrieve the nested-name-specifier that qualifies the name of the namespace, with source-location inf...
SourceLocation getNamespaceLoc() const
Returns the location of the namespace keyword.
SourceLocation getTargetNameLoc() const
Returns the location of the identifier in the named namespace.
NamespaceDecl * getNamespace()
Retrieve the namespace declaration aliased by this directive.
Represent a C++ namespace.
SourceLocation getRBraceLoc() const
SourceLocation getBeginLoc() const LLVM_READONLY
bool isOriginalNamespace() const
Return true if this declaration is an original (first) declaration of the namespace.
bool isAnonymousNamespace() const
Returns true if this is an anonymous namespace declaration.
bool isInline() const
Returns true if this is an inline namespace declaration.
NamespaceDecl * getAnonymousNamespace() const
Retrieve the anonymous namespace nested inside this namespace, if any.
bool isNested() const
Returns true if this is a nested namespace declaration.
NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.
QualType getExpansionType(unsigned I) const
Retrieve a particular expansion type within an expanded parameter pack.
bool hasDefaultArgument() const
Determine whether this template parameter has a default argument.
unsigned getPosition() const
Get the position of the template parameter within its parameter list.
bool defaultArgumentWasInherited() const
Determines whether the default argument was inherited from a previous declaration of this template.
TypeSourceInfo * getExpansionTypeSourceInfo(unsigned I) const
Retrieve a particular expansion type source info within an expanded parameter pack.
unsigned getNumExpansionTypes() const
Retrieves the number of expansion types in an expanded parameter pack.
bool isExpandedParameterPack() const
Whether this parameter is a non-type template parameter pack that has a known list of different types...
bool isParameterPack() const
Whether this parameter is a non-type template parameter pack.
Expr * getDefaultArgument() const
Retrieve the default argument, if any.
unsigned getDepth() const
Get the nesting depth of the template parameter.
Expr * getPlaceholderTypeConstraint() const
Return the constraint introduced by the placeholder type of this non-type template parameter (if any)...
This represents '#pragma omp allocate ...' directive.
Pseudo declaration for capturing expressions.
OMPChildren * Data
Data, associated with the directive.
This represents '#pragma omp declare mapper ...' directive.
OMPDeclareMapperDecl * getPrevDeclInScope()
Get reference to previous declare mapper construct in the same scope with the same name.
DeclarationName getVarName()
Get the name of the variable declared in the mapper.
This represents '#pragma omp declare reduction ...' directive.
Expr * getInitializer()
Get initializer expression (if specified) of the declare reduction construct.
Expr * getInitPriv()
Get Priv variable of the initializer.
Expr * getCombinerOut()
Get Out variable of the combiner.
Expr * getCombinerIn()
Get In variable of the combiner.
Expr * getCombiner()
Get combiner expression of the declare reduction construct.
InitKind getInitializerKind() const
Get initializer kind.
OMPDeclareReductionDecl * getPrevDeclInScope()
Get reference to previous declare reduction construct in the same scope with the same name.
Expr * getInitOrig()
Get Orig variable of the initializer.
This represents '#pragma omp requires...' directive.
This represents '#pragma omp threadprivate ...' directive.
Represents a field declaration created by an @defs(...).
static bool classofKind(Kind K)
ObjCCategoryDecl - Represents a category declaration.
protocol_loc_range protocol_locs() const
unsigned protocol_size() const
ObjCInterfaceDecl * getClassInterface()
SourceLocation getIvarLBraceLoc() const
SourceLocation getIvarRBraceLoc() const
protocol_range protocols() const
SourceLocation getCategoryNameLoc() const
ObjCCategoryImplDecl - An object of this class encapsulates a category @implementation declaration.
SourceLocation getCategoryNameLoc() const
ObjCCompatibleAliasDecl - Represents alias of a class.
const ObjCInterfaceDecl * getClassInterface() const
ObjCContainerDecl - Represents a container for method declarations.
SourceRange getAtEndRange() const
SourceLocation getAtStartLoc() const
const ObjCInterfaceDecl * getClassInterface() const
ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...
init_iterator init_end()
init_end() - Retrieve an iterator past the last initializer.
SourceLocation getIvarRBraceLoc() const
bool hasNonZeroConstructors() const
Do any of the ivars of this class (not counting its base classes) require construction other than zer...
SourceLocation getSuperClassLoc() const
bool hasDestructors() const
Do any of the ivars of this class (not counting its base classes) require non-trivial destruction?
init_iterator init_begin()
init_begin() - Retrieve an iterator to the first initializer.
const ObjCInterfaceDecl * getSuperClass() const
SourceLocation getIvarLBraceLoc() const
Represents an ObjC class declaration.
protocol_range protocols() const
unsigned getODRHash()
Get precomputed ODRHash or add a new one.
protocol_loc_range protocol_locs() const
ObjCCategoryDecl * getCategoryListRaw() const
Retrieve the raw pointer to the start of the category/extension list.
bool isThisDeclarationADefinition() const
Determine whether this particular declaration of this class is actually also a definition.
const Type * getTypeForDecl() const
SourceLocation getEndOfDefinitionLoc() const
TypeSourceInfo * getSuperClassTInfo() const
ObjCIvarDecl - Represents an ObjC instance variable.
AccessControl getAccessControl() const
bool getSynthesize() const
static bool classofKind(Kind K)
ObjCMethodDecl - Represents an instance or class method declaration.
ImplicitParamDecl * getSelfDecl() const
bool isOverriding() const
Whether this method overrides any other in the class hierarchy.
ObjCDeclQualifier getObjCDeclQualifier() const
ArrayRef< ParmVarDecl * > parameters() const
unsigned param_size() const
bool isPropertyAccessor() const
Stmt * getBody() const override
Retrieve the body of this method, if it has one.
SourceLocation getEndLoc() const LLVM_READONLY
TypeSourceInfo * getReturnTypeSourceInfo() const
bool hasRedeclaration() const
True if redeclared in the same interface.
bool isSynthesizedAccessorStub() const
bool hasRelatedResultType() const
Determine whether this method has a result type that is related to the message receiver's type.
ImplementationControl getImplementationControl() const
bool isRedeclaration() const
True if this is a method redeclaration in the same interface.
ImplicitParamDecl * getCmdDecl() const
bool isInstanceMethod() const
QualType getReturnType() const
bool hasSkippedBody() const
True if the method was a definition but its body was skipped.
Represents one property declaration in an Objective-C interface.
SourceLocation getGetterNameLoc() const
ObjCMethodDecl * getGetterMethodDecl() const
ObjCMethodDecl * getSetterMethodDecl() const
SourceLocation getSetterNameLoc() const
SourceLocation getAtLoc() const
ObjCIvarDecl * getPropertyIvarDecl() const
Selector getSetterName() const
TypeSourceInfo * getTypeSourceInfo() const
Selector getGetterName() const
SourceLocation getLParenLoc() const
ObjCPropertyAttribute::Kind getPropertyAttributesAsWritten() const
ObjCPropertyAttribute::Kind getPropertyAttributes() const
PropertyControl getPropertyImplementation() const
ObjCPropertyImplDecl - Represents implementation declaration of a property in a class or category imp...
ObjCIvarDecl * getPropertyIvarDecl() const
SourceLocation getPropertyIvarDeclLoc() const
Expr * getSetterCXXAssignment() const
ObjCPropertyDecl * getPropertyDecl() const
Expr * getGetterCXXConstructor() const
ObjCMethodDecl * getSetterMethodDecl() const
SourceLocation getBeginLoc() const LLVM_READONLY
ObjCMethodDecl * getGetterMethodDecl() const
Represents an Objective-C protocol declaration.
bool isThisDeclarationADefinition() const
Determine whether this particular declaration is also the definition.
protocol_loc_range protocol_locs() const
protocol_range protocols() const
unsigned getODRHash()
Get precomputed ODRHash or add a new one.
unsigned protocol_size() const
Represents the declaration of an Objective-C type parameter.
Stores a list of Objective-C type parameters for a parameterized class or a category/extension thereo...
unsigned size() const
Determine the number of type parameters in this list.
SourceLocation getRAngleLoc() const
SourceLocation getLAngleLoc() const
Represents a parameter to a function.
bool isKNRPromoted() const
True if the value passed to this parameter must undergo K&R-style default argument promotion:
unsigned getFunctionScopeIndex() const
Returns the index of this parameter in its prototype or method scope.
bool isObjCMethodParameter() const
ObjCDeclQualifier getObjCDeclQualifier() const
bool hasUninstantiatedDefaultArg() const
bool hasInheritedDefaultArg() const
Expr * getUninstantiatedDefaultArg()
unsigned getFunctionScopeDepth() const
Represents a #pragma detect_mismatch line.
StringRef getName() const
StringRef getValue() const
PrettyDeclStackTraceEntry - If a crash occurs in the parser while parsing something related to a decl...
A (possibly-)qualified type.
Represents a struct/union/class.
unsigned getODRHash()
Get precomputed ODRHash or add a new one.
bool hasNonTrivialToPrimitiveDestructCUnion() const
bool hasNonTrivialToPrimitiveCopyCUnion() const
bool hasVolatileMember() const
bool hasFlexibleArrayMember() const
bool hasNonTrivialToPrimitiveDefaultInitializeCUnion() const
bool hasObjectMember() const
bool isNonTrivialToPrimitiveDestroy() const
bool isNonTrivialToPrimitiveCopy() const
bool isParamDestroyedInCallee() const
RecordDecl * getMostRecentDecl()
ArgPassingKind getArgPassingRestrictions() const
bool isNonTrivialToPrimitiveDefaultInitialize() const
Functions to query basic properties of non-trivial C structs.
bool isAnonymousStructOrUnion() const
Whether this is an anonymous struct or union.
Declaration of a redeclarable template.
bool isMemberSpecialization() const
Determines whether this template was a specialization of a member template.
RedeclarableTemplateDecl * getInstantiatedFromMemberTemplate() const
Retrieve the member template from which this template was instantiated, or nullptr if this template w...
Provides common interface for the Decls that can be redeclared.
decl_type * getFirstDecl()
Return the first declaration of this declaration or itself if this is the only declaration.
decl_type * getPreviousDecl()
Return the previous declaration of this declaration or NULL if this is the first declaration.
decl_type * getMostRecentDecl()
Returns the most recent (re)declaration of this declaration.
bool isFirstDecl() const
True if this is the first declaration in its redeclaration chain.
Represents the body of a requires-expression.
Encodes a location in the source.
bool isValid() const
Return true if this is a valid SourceLocation object.
This class handles loading and caching of source files into memory.
Represents a C++11 static_assert declaration.
SourceLocation getRParenLoc() const
StringLiteral * getMessage()
Represents the declaration of a struct/union/class/enum.
SourceRange getBraceRange() const
bool isThisDeclarationADefinition() const
Return true if this declaration is a completion definition of the type.
bool isEmbeddedInDeclarator() const
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.
TypedefNameDecl * getTypedefNameForAnonDecl() const
bool isCompleteDefinitionRequired() const
Return true if this complete decl is required to be complete for some existing use.
bool isFreeStanding() const
True if this tag is free standing, e.g. "struct foo;".
TagKind getTagKind() const
Represents a template argument.
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.
const APValue & getValue() const
TemplateTemplateParmDecl - Declares a template template parameter, e.g., "T" in.
TemplateParameterList * getExpansionTemplateParameters(unsigned I) const
Retrieve a particular expansion type within an expanded parameter pack.
unsigned getNumExpansionTemplateParameters() const
Retrieves the number of expansion template parameters in an expanded parameter pack.
const TemplateArgumentLoc & getDefaultArgument() const
Retrieve the default argument, if any.
unsigned getPosition() const
Get the position of the template parameter within its parameter list.
bool isParameterPack() const
Whether this template template parameter is a template parameter pack.
bool defaultArgumentWasInherited() const
Determines whether the default argument was inherited from a previous declaration of this template.
unsigned getDepth() const
Get the nesting depth of the template parameter.
bool isExpandedParameterPack() const
Whether this parameter is a template template parameter pack that has a known list of different templ...
bool hasDefaultArgument() const
Determine whether this template parameter has a default argument.
Declaration of a template type parameter.
bool wasDeclaredWithTypename() const
Whether this template type parameter was declared with the 'typename' keyword.
bool hasTypeConstraint() const
Determine whether this template parameter has a type-constraint.
TypeSourceInfo * getDefaultArgumentInfo() const
Retrieves the default argument's source information, if any.
const TypeConstraint * getTypeConstraint() const
Returns the type constraint associated with this template parameter (if any).
bool hasDefaultArgument() const
Determine whether this template parameter has a default argument.
bool defaultArgumentWasInherited() const
Determines whether the default argument was inherited from a previous declaration of this template.
bool isExpandedParameterPack() const
Whether this parameter is a template type parameter pack that has a known list of different type-cons...
unsigned getNumExpansionParameters() const
Retrieves the number of parameters in an expanded parameter pack.
A declaration that models statements at global scope.
The top declaration context.
Represents the declaration of a typedef-name via a C++11 alias-declaration.
TypeAliasTemplateDecl * getDescribedAliasTemplate() const
Declaration of an alias template.
Expr * getImmediatelyDeclaredConstraint() const
Get the immediately-declared constraint expression introduced by this type-constraint,...
Represents a declaration of a type.
const Type * getTypeForDecl() const
SourceLocation getBeginLoc() const LLVM_READONLY
QualType getType() const
Return the type wrapped by this type source info.
CXXRecordDecl * getAsCXXRecordDecl() const
Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or beca...
Represents the declaration of a typedef-name via the 'typedef' type specifier.
Base class for declarations which introduce a typedef-name.
TypeSourceInfo * getTypeSourceInfo() const
QualType getUnderlyingType() const
TagDecl * getAnonDeclWithTypedefName(bool AnyRedecl=false) const
Retrieves the tag declaration for which this is the typedef name for linkage purposes,...
An artificial decl, representing a global anonymous constant value which is uniquified by value withi...
const APValue & getValue() const
This node is generated when a using-declaration that was annotated with attribute((using_if_exists)) ...
Represents a dependent using declaration which was marked with typename.
SourceLocation getTypenameLoc() const
Returns the source location of the 'typename' keyword.
NestedNameSpecifierLoc getQualifierLoc() const
Retrieve the nested-name-specifier that qualifies the name, with source-location information.
SourceLocation getEllipsisLoc() const
Get the location of the ellipsis if this is a pack expansion.
Represents a dependent using declaration which was not marked with typename.
SourceLocation getUsingLoc() const
Returns the source location of the 'using' keyword.
NestedNameSpecifierLoc getQualifierLoc() const
Retrieve the nested-name-specifier that qualifies the name, with source-location information.
SourceLocation getEllipsisLoc() const
Get the location of the ellipsis if this is a pack expansion.
Represents a C++ using-declaration.
bool hasTypename() const
Return true if the using declaration has 'typename'.
NestedNameSpecifierLoc getQualifierLoc() const
Retrieve the nested-name-specifier that qualifies the name, with source-location information.
SourceLocation getUsingLoc() const
Return the source location of the 'using' keyword.
Represents C++ using-directive.
SourceLocation getUsingLoc() const
Return the location of the using keyword.
NamespaceDecl * getNominatedNamespace()
Returns the namespace nominated by this using-directive.
DeclContext * getCommonAncestor()
Returns the common ancestor context of this using-directive and its nominated namespace.
SourceLocation getNamespaceKeyLocation() const
Returns the location of the namespace keyword.
NestedNameSpecifierLoc getQualifierLoc() const
Retrieve the nested-name-specifier that qualifies the name of the namespace, with source-location inf...
Represents a C++ using-enum-declaration.
SourceLocation getEnumLoc() const
The source location of the 'enum' keyword.
TypeSourceInfo * getEnumType() const
SourceLocation getUsingLoc() const
The source location of the 'using' keyword.
Represents a pack of using declarations that a single using-declarator pack-expanded into.
NamedDecl * getInstantiatedFromUsingDecl() const
Get the using declaration from which this was instantiated.
ArrayRef< NamedDecl * > expansions() const
Get the set of using declarations that this pack expanded into.
Represents a shadow declaration implicitly introduced into a scope by a (resolved) using-declaration ...
NamedDecl * getTargetDecl() const
Gets the underlying declaration which has been brought into the local scope.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
Represents a variable declaration or definition.
VarTemplateDecl * getDescribedVarTemplate() const
Retrieves the variable template that is described by this variable declaration.
bool isConstexpr() const
Whether this variable is (C++11) constexpr.
InitializationStyle getInitStyle() const
The style of initialization for this declaration.
bool isInitCapture() const
Whether this variable is the implicit variable for a lambda init-capture.
@ CInit
C-style initialization with assignment.
bool isObjCForDecl() const
Determine whether this variable is a for-loop declaration for a for-in statement in Objective-C.
bool isInlineSpecified() const
bool isStaticDataMember() const
Determines whether this is a static data member.
bool isCXXForRangeDecl() const
Determine whether this variable is the for-range-declaration in a C++0x for-range statement.
bool isNRVOVariable() const
Determine whether this local variable can be used with the named return value optimization (NRVO).
bool isExceptionVariable() const
Determine whether this variable is the exception variable in a C++ catch statememt or an Objective-C ...
bool isInline() const
Whether this variable is (C++1z) inline.
ThreadStorageClassSpecifier getTSCSpec() const
const Expr * getInit() const
bool isARCPseudoStrong() const
Determine whether this variable is an ARC pseudo-__strong variable.
StorageDuration getStorageDuration() const
Get the storage duration of this variable, per C++ [basic.stc].
StorageClass getStorageClass() const
Returns the storage class as written in the source.
bool isEscapingByref() const
Indicates the capture is a __block variable that is captured by a block that can potentially escape (...
bool isThisDeclarationADemotedDefinition() const
If this definition should pretend to be a declaration.
bool isPreviousDeclInSameBlockScope() const
Whether this local extern variable declaration's previous declaration was declared in the same block ...
MemberSpecializationInfo * getMemberSpecializationInfo() const
If this variable is an instantiation of a static data member of a class template specialization,...
Declaration of a variable template.
VarTemplateDecl * getCanonicalDecl() override
Retrieves the canonical declaration of this template.
const ASTTemplateArgumentListInfo * getTemplateArgsAsWritten() const
Get the template arguments as written.
TemplateParameterList * getTemplateParameters() const
Get the list of template parameters.
VarTemplatePartialSpecializationDecl * getInstantiatedFromMember() const
Retrieve the member variable template partial specialization from which this particular variable temp...
bool isMemberSpecialization()
Determines whether this variable template partial specialization was a specialization of a member par...
Represents a variable template specialization, which refers to a variable template with a given set o...
SourceLocation getPointOfInstantiation() const
Get the point of instantiation (if any), or null if none.
const TemplateArgumentList & getTemplateArgs() const
Retrieve the template arguments of the variable template specialization.
const TemplateArgumentList & getTemplateInstantiationArgs() const
Retrieve the set of template arguments that should be used to instantiate the initializer of the vari...
SourceLocation getExternLoc() const
Gets the location of the extern keyword, if present.
SourceLocation getTemplateKeywordLoc() const
Gets the location of the template keyword, if present.
llvm::PointerUnion< VarTemplateDecl *, VarTemplatePartialSpecializationDecl * > getSpecializedTemplateOrPartial() const
Retrieve the variable template or variable template partial specialization which was specialized by t...
TemplateSpecializationKind getSpecializationKind() const
Determine the kind of specialization that this declaration represents.
VarTemplateDecl * getSpecializedTemplate() const
Retrieve the template that this specialization specializes.
TypeSourceInfo * getTypeAsWritten() const
Gets the type of this specialization as it was written by the user, if it was so written.
const unsigned int LOCAL_REDECLARATIONS
Record code for a list of local redeclarations of a declaration.
DeclCode
Record codes for each kind of declaration.
@ DECL_EMPTY
An EmptyDecl record.
@ DECL_CAPTURED
A CapturedDecl record.
@ 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_CXX_CONSTRUCTOR
A CXXConstructorDecl record.
@ DECL_CXX_CONVERSION
A CXXConversionDecl record.
@ DECL_FIELD
A FieldDecl record.
@ DECL_LINKAGE_SPEC
A LinkageSpecDecl record.
@ 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_CLASS_SCOPE_FUNCTION_SPECIALIZATION
A ClassScopeFunctionSpecializationDecl record a class scope function specialization.
@ DECL_BLOCK
A BlockDecl record.
@ DECL_UNRESOLVED_USING_VALUE
An UnresolvedUsingValueDecl record.
@ DECL_TYPE_ALIAS_TEMPLATE
A TypeAliasTemplateDecl record.
@ 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_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.
@ EXPR_IMPLICIT_CAST
An ImplicitCastExpr record.
@ EXPR_CHARACTER_LITERAL
A CharacterLiteral record.
@ EXPR_DECL_REF
A DeclRefExpr record.
@ EXPR_INTEGER_LITERAL
An IntegerLiteral record.
bool isRedeclarableDeclKind(unsigned Kind)
Determine whether the given declaration kind is redeclarable.
bool needsAnonymousDeclarationNumber(const NamedDecl *D)
Determine whether the given declaration needs an anonymous declaration number.
uint32_t DeclID
An ID number that refers to a declaration in an AST file.
bool isPartOfPerModuleInitializer(const Decl *D)
Determine whether the given declaration will be included in the per-module initializer if it needs to...
@ UPD_CXX_ADDED_TEMPLATE_SPECIALIZATION
@ UPD_CXX_ADDED_ANONYMOUS_NAMESPACE
@ GVA_AvailableExternally
@ Specialization
We are substituting template parameters for template arguments in order to form a template specializa...
Linkage
Describes the different kinds of linkage (C++ [basic.link], C99 6.2.2) that an entity may have.
@ SD_Static
Static storage duration.
YAML serialization mapping.
SourceLocation RAngleLoc
The source location of the right angle bracket ('>').
SourceLocation LAngleLoc
The source location of the left angle bracket ('<').
unsigned NumTemplateArgs
The number of template arguments in TemplateArgs.
Copy initialization expr of a __block variable and a boolean flag that indicates whether the expressi...
Data that is common to all of the declarations of a given function template.
Parts of a decomposed MSGuidDecl.
uint16_t Part2
...-89ab-...
uint32_t Part1
{01234567-...
uint16_t Part3
...-cdef-...
uint8_t Part4And5[8]
...-0123-456789abcdef}
static DeclType * getDecl(EntryType *D)