A RetroSearch Logo

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

Search Query:

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

clang: lib/Sema/Sema.cpp Source File

73#include "llvm/ADT/DenseMap.h" 74#include "llvm/ADT/STLExtras.h" 75#include "llvm/ADT/SmallPtrSet.h" 76#include "llvm/Support/TimeProfiler.h" 79using namespace clang

;

92 if

(!SDKInfo && !WarnedDarwinSDKInfoMissing) {

93 Diag

(

Loc

, diag::warn_missing_sdksettings_for_availability_checking)

95

WarnedDarwinSDKInfoMissing =

true

;

101 if

(CachedDarwinSDKInfo)

102 return

CachedDarwinSDKInfo->get();

106 if

(SDKInfo && *SDKInfo) {

107

CachedDarwinSDKInfo = std::make_unique<DarwinSDKInfo>(std::move(**SDKInfo));

108 return

CachedDarwinSDKInfo->get();

111

llvm::consumeError(SDKInfo.takeError());

112

CachedDarwinSDKInfo = std::unique_ptr<DarwinSDKInfo>();

118

std::string InventedName;

119

llvm::raw_string_ostream

OS

(InventedName);

122 OS

<<

"auto:"

<< Index + 1;

124 OS

<< ParamName->

getName

() <<

":auto"

;

135 if

(!Policy.

Bool

) {

137

Policy.

Bool

= BoolMacro->isObjectLike() &&

138

BoolMacro->getNumTokens() == 1 &&

139

BoolMacro->getReplacementToken(0).is(tok::kw__Bool);

169 FileID

PrevFID)

override

{

177 if

(llvm::timeTraceProfilerEnabled()) {

179

ProfilerStack.push_back(llvm::timeTraceAsyncProfilerBegin(

180 "Source"

, FE ? FE->

getName

() : StringRef(

"<unknown>"

)));

183

IncludeStack.push_back(IncludeLoc);

191 if

(!IncludeStack.empty()) {

192 if

(llvm::timeTraceProfilerEnabled())

193

llvm::timeTraceProfilerEnd(ProfilerStack.pop_back_val());

197

IncludeStack.pop_back_val());

215

CurFPFeatures(pp.getLangOpts()), LangOpts(pp.getLangOpts()), PP(pp),

216

Context(ctxt), Consumer(consumer), Diags(PP.getDiagnostics()),

217

SourceMgr(PP.getSourceManager()), APINotes(SourceMgr, LangOpts),

218

AnalysisWarnings(*this), ThreadSafetyDeclCache(nullptr),

219

LateTemplateParser(nullptr), LateTemplateParserCleanup(nullptr),

220

OpaqueParser(nullptr), CurContext(nullptr),

ExternalSource

(nullptr),

221

StackHandler(Diags), CurScope(nullptr), Ident_super(nullptr),

249

MSPointerToMemberRepresentationMethod(

250

LangOpts.getMSPointerToMemberRepresentationMethod()),

251

MSStructPragmaOn(

false

), VtorDispStack(LangOpts.getVtorDispMode()),

253

DataSegStack(nullptr), BSSSegStack(nullptr), ConstSegStack(nullptr),

254

CodeSegStack(nullptr), StrictGuardStackCheckStack(

false

),

256

VisContext(nullptr), PragmaAttributeCurrentTargetDecl(nullptr),

257

StdCoroutineTraitsCache(nullptr), IdResolver(pp),

258

OriginalLexicalContext(nullptr), StdInitializerList(nullptr),

259

FullyCheckedComparisonCategories(

261

StdSourceLocationImplDecl(nullptr), CXXTypeInfoDecl(nullptr),

262

GlobalNewDeleteDeclared(

false

), DisableTypoCorrection(

false

),

263

TyposCorrected(0), IsBuildingRecoveryCallExpr(

false

), NumSFINAEErrors(0),

264

AccessCheckingSFINAE(

false

), CurrentInstantiationScope(nullptr),

265

InNonInstantiationSFINAEContext(

false

), NonInstantiationEntries(0),

266

ArgumentPackSubstitutionIndex(-1), SatisfactionCache(Context) {

270

LoadedExternalKnownNamespaces =

false

;

291 OpenMP

().InitDataSharingAttributesStack();

293

std::unique_ptr<sema::SemaPPCallbacks> Callbacks =

294

std::make_unique<sema::SemaPPCallbacks>();

295

SemaPPCallbackHandler = Callbacks.get();

297

SemaPPCallbackHandler->

set

(*

this

);

320

SC->InitializeSema(*

this

);

325

ExternalSema->InitializeSema(*

this

);

399 if

(OCLCompatibleVersion >= 200) {

428 auto

AddPointerSizeDependentTypes = [&]() {

432 auto

AtomicPtrDiffT =

441

AddPointerSizeDependentTypes();

449

std::vector<QualType> Atomic64BitTypes;

457

Atomic64BitTypes.push_back(AtomicDoubleT);

466

AddPointerSizeDependentTypes();

471#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \ 472 if (getOpenCLOptions().isSupported(#Ext, getLangOpts())) { \ 473 addImplicitTypedef(#ExtType, Context.Id##Ty); \ 475#include "clang/Basic/OpenCLExtensionTypes.def" 481#define SVE_TYPE(Name, Id, SingletonId) \ 482 addImplicitTypedef(#Name, Context.SingletonId); 483#include "clang/Basic/AArch64SVEACLETypes.def" 487#define PPC_VECTOR_MMA_TYPE(Name, Id, Size) \ 488 addImplicitTypedef(#Name, Context.Id##Ty); 489#include "clang/Basic/PPCTypes.def" 490#define PPC_VECTOR_VSX_TYPE(Name, Id, Size) \ 491 addImplicitTypedef(#Name, Context.Id##Ty); 492#include "clang/Basic/PPCTypes.def" 496#define RVV_TYPE(Name, Id, SingletonId) \ 497 addImplicitTypedef(Name, Context.SingletonId); 498#include "clang/Basic/RISCVVTypes.def" 503#define WASM_TYPE(Name, Id, SingletonId) \ 504 addImplicitTypedef(Name, Context.SingletonId); 505#include "clang/Basic/WebAssemblyReferenceTypes.def" 511#define AMDGPU_TYPE(Name, Id, SingletonId, Width, Align) \ 512 addImplicitTypedef(Name, Context.SingletonId); 513#include "clang/Basic/AMDGPUTypes.def" 529 "failed to clean up an InstantiatingTemplate?"

);

544

ExternalSema->ForgetSema();

547

std::vector<ConstraintSatisfaction *> Satisfactions;

548

Satisfactions.reserve(SatisfactionCache.size());

549 for

(

auto

&

Node

: SatisfactionCache)

550

Satisfactions.push_back(&

Node

);

551 for

(

auto

*

Node

: Satisfactions)

557 OpenMP

().DestroyDataSharingAttributesStack();

561

SemaPPCallbackHandler->

reset

();

565

llvm::function_ref<

void

()> Fn) {

570

UnavailableAttr::ImplicitReason reason) {

573 if

(!fn)

return false

;

584 if

(fn->

hasAttr

<UnavailableAttr>())

return true

;

586

fn->

addAttr

(UnavailableAttr::CreateImplicit(

Context

,

""

, reason, loc));

595

assert(

E

&&

"Cannot use with NULL ptr"

);

602 if

(

auto

*Ex = dyn_cast<MultiplexExternalSemaSource>(

ExternalSource

))

609

llvm::errs() <<

"\n*** Semantic Analysis Stats:\n"

;

619

std::optional<NullabilityKind> ExprNullability = SrcType->

getNullability

();

624

std::optional<NullabilityKind> TypeNullability = DstType->

getNullability

();

628 Diag

(

Loc

, diag::warn_nullability_lost) << SrcType << DstType;

636 if

(SrcFX != DstFX) {

638 if

(Diff.shouldDiagnoseConversion(SrcType, SrcFX, DstType, DstFX))

639 Diag

(

Loc

, diag::warn_invalid_add_func_effects) << Diff.effectName();

649 if

(Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)

655 if

(isa<GNUNullExpr>(EStripped))

701

(

"can't implicitly cast glvalue to prvalue with this cast " 706 case

CK_LValueToRValue:

707 case

CK_ArrayToPointerDecay:

708 case

CK_FunctionToPointerDecay:

710 case

CK_NonAtomicToAtomic:

711 case

CK_HLSLArrayRValue:

716 "can't cast prvalue to glvalue"

);

722

Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)

733 if

(Kind == CK_HLSLArrayRValue && !isa<HLSLOutArgExpr>(

E

))

740 if

(Kind == CK_ArrayToPointerDecay) {

749 E

= Materialized.

get

();

760 if

(

const auto

*DRE = dyn_cast<DeclRefExpr>(

E

)) {

761 if

(

const auto

*VD = dyn_cast<VarDecl>(DRE->getDecl())) {

773 if

(ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {

774

ImpCast->setType(Ty);

775

ImpCast->setValueKind(VK);

797

llvm_unreachable(

"unknown scalar type kind"

);

805 if

(

D

->isExternallyVisible())

812 for

(

const auto

*Spec : Template->specializations())

819 if

(FD->hasBody(DeclToCheck))

825 if

(DeclToCheck != FD)

829 if

(

const VarDecl

*VD = dyn_cast<VarDecl>(

D

)) {

835 if

(VD->isReferenced() &&

836

VD->mightBeUsableInConstantExpressions(SemaRef->

Context

))

842 for

(

const auto

*Spec : Template->specializations())

855 if

(DeclToCheck != VD)

863 if

(

const auto

*FD = dyn_cast<FunctionDecl>(ND))

864 return

FD->isExternC();

865 return

cast<VarDecl>(ND)->isExternC();

882 SmallVectorImpl

<std::pair<NamedDecl *, SourceLocation> > &Undefined) {

890 if

(ND->

hasAttr

<WeakRefAttr>())

continue

;

892 if

(isa<CXXDeductionGuideDecl>(ND))

895 if

(ND->

hasAttr

<DLLImportAttr>() || ND->

hasAttr

<DLLExportAttr>()) {

902 if

(

const auto

*FD = dyn_cast<FunctionDecl>(ND)) {

905 if

(FD->isExternallyVisible() &&

907

!FD->getMostRecentDecl()->isInlined() &&

908

!FD->hasAttr<ExcludeFromExplicitInstantiationAttr>())

910 if

(FD->getBuiltinID())

913 const auto

*VD = cast<VarDecl>(ND);

916 if

(VD->isExternallyVisible() &&

918

!VD->getMostRecentDecl()->isInline() &&

919

!VD->hasAttr<ExcludeFromExplicitInstantiationAttr>())

924 if

(VD->isKnownToBeDefined())

928

Undefined.push_back(std::make_pair(ND, UndefinedUse.second));

941 if

(Undefined.empty())

return

;

943 for

(

const auto

&Undef : Undefined) {

944 ValueDecl

*VD = cast<ValueDecl>(Undef.first);

958

? diag::ext_undefined_internal_type

959

: diag::err_undefined_internal_type)

960

<< isa<VarDecl>(VD) << VD;

965 bool

IsImplicitBase =

false

;

966 if

(

const auto

*BaseD = dyn_cast<FunctionDecl>(VD)) {

967 auto

*DVAttr = BaseD->

getAttr

<OMPDeclareVariantAttr>();

968 if

(DVAttr && !DVAttr->getTraitInfo().isExtensionActive(

969

llvm::omp::TraitProperty::

970

implementation_extension_disable_implicit_base)) {

971 const auto

*

Func

= cast<FunctionDecl>(

972

cast<DeclRefExpr>(DVAttr->getVariantFuncRef())->getDecl());

973

IsImplicitBase = BaseD->isImplicit() &&

974 Func

->getIdentifier()->isMangledOpenMPVariantName();

979

<< isa<VarDecl>(VD) << VD;

980

}

else if

(

auto

*FD = dyn_cast<FunctionDecl>(VD)) {

982

assert(FD->getMostRecentDecl()->isInlined() &&

983 "used object requires definition but isn't inline or internal?"

);

987

assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() &&

988 "used var requires definition but isn't inline or internal?"

);

992

S.

Diag

(UseLoc, diag::note_used_here);

1002 for

(

auto

&WeakID : WeakIDs)

1016

RecordCompleteMap::iterator

Cache

= MNCComplete.find(RD);

1017 if

(

Cache

!= MNCComplete.end())

1018 return Cache

->second;

1026 Complete

= M->isDefined() || M->isDefaulted() ||

1027

(M->isPureVirtual() && !isa<CXXDestructorDecl>(M));

1033 Complete

= !F->getTemplatedDecl()->isLateTemplateParsed() &&

1034

F->getTemplatedDecl()->isDefined();

1035 else if

(

const CXXRecordDecl

*R = dyn_cast<CXXRecordDecl>(*I)) {

1036 if

(R->isInjectedClassName())

1038 if

(R->hasDefinition())

1059

RecordCompleteMap::iterator

Cache

= RecordsComplete.find(RD);

1060 if

(

Cache

!= RecordsComplete.end())

1061 return Cache

->second;

1069 if

(

CXXRecordDecl

*FriendD = TSI->getType()->getAsCXXRecordDecl())

1076

dyn_cast<FunctionDecl>((*I)->getFriendDecl()))

1092 if

(TD->isReferenced())

1094 Diag

(TD->getLocation(), diag::warn_unused_local_typedef)

1095

<< isa<TypeAliasDecl>(TD) << TD->getDeclName();

1103

HandleStartOfHeaderUnit();

1143 for

(

auto

PII : Pending)

1144 if

(

auto Func

= dyn_cast<FunctionDecl>(PII.first))

1145 Func

->setInstantiationIsPending(

true

);

1147

Pending.begin(), Pending.end());

1151

llvm::TimeTraceScope TimeScope(

"PerformPendingInstantiations"

);

1158 "end of TU template instantiation should not create more " 1159 "late-parsed templates"

);

1164 for

(

const auto

&Typo : DelayedTypos) {

1168

DelayedTypos.clear();

1173

&&

"reached end of translation unit with a pool attached?"

);

1186

!ModuleScopes.empty() && ModuleScopes.back().Module->Kind ==

1206 if

(

LangOpts

.PCHInstantiateTemplates) {

1207

llvm::TimeTraceScope TimeScope(

"PerformPendingInstantiations"

);

1231

return ShouldRemoveFromUnused(this, DD);

1245 if

(WeakIDs.second.empty())

1250 if

(PrevDecl !=

nullptr

&&

1251

!(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))

1252 for

(

const auto

&WI : WeakIDs.second)

1253 Diag

(WI.getLocation(), diag::warn_attribute_wrong_decl_type)

1256 for

(

const auto

&WI : WeakIDs.second)

1257 Diag

(WI.getLocation(), diag::warn_weak_identifier_undeclared)

1272 if

(!ModuleScopes.empty() && ModuleScopes.back().Module->Kind ==

1274 Diag

(ModuleScopes.back().BeginLoc,

1275

diag::err_module_declaration_missing_after_global_module_introducer);

1276

}

else if

(

getLangOpts

().getCompilingModule() ==

1287

diag::err_module_declaration_missing);

1293 auto

DoesModNeedInit = [

this

](

Module

*M) {

1296 for

(

auto

[Exported, _] : M->Exports)

1297 if

(Exported->isNamedModuleInterfaceHasInit())

1306

CurrentModule->NamedModuleHasInit =

1307

DoesModNeedInit(CurrentModule) ||

1308

llvm::any_of(CurrentModule->submodules(),

1309

[&](

auto

*SubM) { return DoesModNeedInit(SubM); });

1319

Stack.push_back(CurrentModule);

1320 while

(!Stack.empty()) {

1321 Module

*Mod = Stack.pop_back_val();

1333

Stack.append(SubmodulesRange.begin(), SubmodulesRange.end());

1345 if

(!PendingInlineFuncDecls.empty()) {

1346 for

(

auto

*

D

: PendingInlineFuncDecls) {

1347 if

(

auto

*FD = dyn_cast<FunctionDecl>(

D

)) {

1348 bool

DefInPMF =

false

;

1349 if

(

auto

*FDD = FD->getDefinition()) {

1350

DefInPMF = FDD->getOwningModule()->isPrivateModule();

1354 Diag

(FD->getLocation(), diag::err_export_inline_not_defined)

1359 Diag

(ModuleScopes.back().BeginLoc,

1360

diag::note_private_module_fragment);

1364

PendingInlineFuncDecls.clear();

1378

llvm::SmallSet<VarDecl *, 32> Seen;

1379 for

(TentativeDefinitionsType::iterator

1388 if

(!VD || VD->

isInvalidDecl

() || !Seen.insert(VD).second)

1400

diag::err_tentative_def_incomplete_type))

1428 for

(UnusedFileScopedDeclsType::iterator

1435 if

(

const FunctionDecl

*FD = dyn_cast<FunctionDecl>(*I)) {

1437 if

(!FD->hasBody(DiagD))

1444

DiagRange.

setEnd

(ASTTAL->RAngleLoc);

1446 if

(isa<CXXMethodDecl>(DiagD))

1448

<< DiagD << DiagRange;

1450 if

(FD->getStorageClass() ==

SC_Static

&&

1451

!FD->isInlineSpecified() &&

1455

diag::warn_unneeded_static_internal_decl)

1456

<< DiagD << DiagRange;

1459

<<

0 << DiagD << DiagRange;

1461

}

else if

(!FD->isTargetMultiVersion() ||

1462

FD->isTargetMultiVersionDefault()) {

1463 if

(FD->getDescribedFunctionTemplate())

1465

<<

0 << DiagD << DiagRange;

1468

? diag::warn_unused_member_function

1469

: diag::warn_unused_function)

1470

<< DiagD << DiagRange;

1475

DiagD = cast<VarDecl>(*I);

1477 if

(

const auto

*VTSD = dyn_cast<VarTemplateSpecializationDecl>(DiagD)) {

1479

VTSD->getTemplateArgsAsWritten())

1480

DiagRange.

setEnd

(ASTTAL->RAngleLoc);

1484

<<

1 << DiagD << DiagRange;

1487

<<

1 << DiagD << DiagRange;

1493

<< DiagD << DiagRange;

1496

<< DiagD << DiagRange;

1514

<<

D

->getDeclName();

1522 for

(

const auto

&DeletedFieldInfo :

DeleteExprs

) {

1523 for

(

const auto

&

DeleteExprLoc

: DeletedFieldInfo.second) {

1524

AnalyzeDeleteExprMismatch(DeletedFieldInfo.first,

DeleteExprLoc

.first,

1539 "Didn't unmark var as having its initializer parsed"

);

1554 if

(isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC) ||

1555

isa<RequiresExprBodyDecl>(DC)) {

1557

}

else if

(!AllowLambda && isa<CXXMethodDecl>(DC) &&

1558

cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call &&

1559

cast<CXXRecordDecl>(DC->

getParent

())->isLambda()) {

1572 return

dyn_cast<FunctionDecl>(DC);

1577 while

(isa<RecordDecl>(DC))

1579 return

dyn_cast<ObjCMethodDecl>(DC);

1584 if

(isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))

1585 return

cast<NamedDecl>(DC);

1604 if

(std::optional<TemplateDeductionInfo *> Info =

isSFINAEContext

()) {

1617 if

(*Info && !(*Info)->hasSFINAEDiagnostic()) {

1618

(*Info)->addSFINAEDiagnostic(DiagInfo.

getLocation

(),

1640 if

(*Info && !(*Info)->hasSFINAEDiagnostic()) {

1641

(*Info)->addSFINAEDiagnostic(DiagInfo.

getLocation

(),

1648 Diag

(

Loc

, diag::warn_cxx98_compat_sfinae_access_control);

1660

(*Info)->addSuppressedDiagnostic(DiagInfo.

getLocation

(),

1689 auto

*FD = dyn_cast<FunctionDecl>(

CurContext

);

1695 for

(

auto

PDAt :

Loc

->second) {

1697

PDAt.second.getDiagID()))

1712

S.

Diags

.

Report

(FnIt->second.Loc, diag::note_called_by));

1713

Builder << FnIt->second.FD;

1747class

DeferredDiagnosticsEmitter

1765 bool

ShouldEmitRootNode;

1770 unsigned

InOMPDeviceContext;

1772

DeferredDiagnosticsEmitter(

Sema

&S)

1773

: Inherited(S), ShouldEmitRootNode(

false

), InOMPDeviceContext(0) {}

1775 bool

shouldVisitDiscardedStmt()

const

{

return false

; }

1778

++InOMPDeviceContext;

1779

Inherited::VisitOMPTargetDirective(

Node

);

1780

--InOMPDeviceContext;

1784 if

(isa<VarDecl>(

D

))

1786 if

(

auto

*FD = dyn_cast<FunctionDecl>(

D

))

1787

checkFunc(

Loc

, FD);

1789

Inherited::visitUsedDecl(

Loc

,

D

);

1794 "Should only check file-scope variables"

);

1796 auto

DevTy = OMPDeclareTargetDeclAttr::getDeviceType(VD);

1797 bool

IsDev = DevTy && (*DevTy == OMPDeclareTargetDeclAttr::DT_NoHost ||

1798

*DevTy == OMPDeclareTargetDeclAttr::DT_Any);

1800

++InOMPDeviceContext;

1801

this->Visit(

Init

);

1803

--InOMPDeviceContext;

1808 auto

&Done = DoneMap[InOMPDeviceContext > 0 ? 1 : 0];

1809 FunctionDecl

*Caller = UsePath.empty() ? nullptr : UsePath.back();

1810 if

((!ShouldEmitRootNode && !S.

getLangOpts

().OpenMP && !Caller) ||

1814 if

(Caller && S.

LangOpts

.OpenMP && UsePath.size() == 1 &&

1815

(ShouldEmitRootNode || InOMPDeviceContext))

1822 if

(ShouldEmitRootNode || InOMPDeviceContext)

1823

emitDeferredDiags(FD, Caller);

1826 if

(!Done.insert(FD).second)

1828

InUsePath.insert(FD);

1829

UsePath.push_back(FD);

1830 if

(

auto

*S = FD->

getBody

()) {

1834

InUsePath.erase(FD);

1837 void

checkRecordedDecl(

Decl

*

D

) {

1838 if

(

auto

*FD = dyn_cast<FunctionDecl>(

D

)) {

1840

Sema::FunctionEmissionStatus::Emitted;

1843

checkVar(cast<VarDecl>(

D

));

1847 void

emitDeferredDiags(

FunctionDecl

*FD,

bool

ShowCallStack) {

1851 bool

HasWarningOrError =

false

;

1852 bool

FirstDiag =

true

;

1859

HasWarningOrError |=

1868 if

(FirstDiag && HasWarningOrError && ShowCallStack) {

1880

DeclsToCheckForDeferredDiags);

1883

DeclsToCheckForDeferredDiags.empty())

1886

DeferredDiagnosticsEmitter DDE(*

this

);

1887 for

(

auto

*

D

: DeclsToCheckForDeferredDiags)

1888

DDE.checkRecordedDecl(

D

);

1919

: S(S),

Loc

(

Loc

), DiagID(DiagID), Fn(Fn),

1920

ShowCallStack(K == K_ImmediateWithCallStack || K == K_Deferred) {

1925 case

K_ImmediateWithCallStack:

1926

ImmediateDiag.emplace(

1927

ImmediateDiagBuilder(S.

Diags

.

Report

(

Loc

, DiagID), S, DiagID));

1930

assert(Fn &&

"Must have a function to attach the deferred diag to."

);

1932

PartialDiagId.emplace(

Diags

.size());

1938

Sema::SemaDiagnosticBuilder::SemaDiagnosticBuilder(SemaDiagnosticBuilder &&

D

)

1940

ShowCallStack(

D

.ShowCallStack), ImmediateDiag(

D

.ImmediateDiag),

1941

PartialDiagId(

D

.PartialDiagId) {

1943 D

.ShowCallStack =

false

;

1944 D

.ImmediateDiag.reset();

1945 D

.PartialDiagId.reset();

1948

Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() {

1949 if

(ImmediateDiag) {

1954

ImmediateDiag.reset();

1955 if

(IsWarningOrError && ShowCallStack)

1958

assert((!PartialDiagId || ShowCallStack) &&

1959 "Must always show call stack for deferred diags."

);

1965

FD = FD ? FD : getCurFunctionDecl();

1966 if

(LangOpts.OpenMP)

1967 return

LangOpts.OpenMPIsTargetDevice

1968

? OpenMP().diagIfOpenMPDeviceCode(

Loc

, DiagID, FD)

1969

: OpenMP().diagIfOpenMPHostCode(

Loc

, DiagID, FD);

1972

:

CUDA

().DiagIfHostCode(

Loc

, DiagID);

1975 return

SYCL().DiagIfDeviceCode(

Loc

, DiagID);

1982 if

(isUnevaluatedContext() || Ty.

isNull

())

1989 if

(

D

&& LangOpts.SYCLIsDevice) {

1990

llvm::DenseSet<QualType>

Visited

;

1991

SYCL().deepTypeCheckForDevice(

Loc

,

Visited

,

D

);

1994 Decl

*

C

= cast<Decl>(getCurLexicalContext());

1998 if

(

const auto

*MD = dyn_cast<CXXMethodDecl>(

C

)) {

1999 if

((MD->isCopyAssignmentOperator() || MD->isMoveAssignmentOperator()) &&

2003 if

(

const auto

*Ctor = dyn_cast<CXXConstructorDecl>(MD))

2004 if

(Ctor->isCopyOrMoveConstructor() && Ctor->isTrivial())

2011

? cast<FunctionDecl>(

C

)

2012

: dyn_cast_or_null<FunctionDecl>(

D

);

2014 auto

CheckDeviceType = [&](

QualType

Ty) {

2024

PD <<

"expression"

;

2025

targetDiag(

Loc

, PD, FD)

2026

<<

false

<< 0

<<

false 2034 bool

LongDoubleMismatched =

false

;

2037 if

((&Sem != &llvm::APFloat::PPCDoubleDouble() &&

2039

(&Sem == &llvm::APFloat::PPCDoubleDouble() &&

2041

LongDoubleMismatched =

true

;

2050

!LangOpts.CUDAIsDevice) ||

2051

LongDoubleMismatched) {

2056

PD <<

"expression"

;

2058 if

(targetDiag(

Loc

, PD, FD)

2060

<<

static_cast<unsigned>

(Context.

getTypeSize

(Ty)) << Ty

2066

targetDiag(

D

->

getLocation

(), diag::note_defined_here, FD) <<

D

;

2070 auto

CheckType = [&](

QualType

Ty,

bool

IsRetTy =

false

) {

2071 if

(LangOpts.SYCLIsDevice ||

2072

(LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice) ||

2073

LangOpts.CUDAIsDevice)

2074

CheckDeviceType(Ty);

2083

PD <<

"expression"

;

2086

<<

false

<< 0 << Ty <<

false 2092

targetDiag(

D

->

getLocation

(), diag::note_defined_here, FD) <<

D

;

2095 bool

IsDouble = UnqualTy == Context.

DoubleTy

;

2096 bool

IsFloat = UnqualTy == Context.

FloatTy

;

2097 if

(IsRetTy && !TI.

hasFPReturn

() && (IsDouble || IsFloat)) {

2102

PD <<

"expression"

;

2105

<<

false

<< 0 << Ty <<

true 2111

targetDiag(

D

->

getLocation

(), diag::note_defined_here, FD) <<

D

;

2115

llvm::StringMap<bool> CallerFeatureMap;

2117

RISCV().checkRVVTypeSupport(Ty,

Loc

,

D

, CallerFeatureMap);

2122

llvm::StringMap<bool> CallerFeatureMap;

2126 Diag

(

Loc

, diag::err_sve_vector_in_non_sve_target) << Ty;

2129 Diag

(

Loc

, diag::err_sve_vector_in_non_streaming_function) << Ty;

2136 if

(

const auto

*FPTy = dyn_cast<FunctionProtoType>(Ty)) {

2137 for

(

const auto

&ParamTy : FPTy->param_types())

2139

CheckType(FPTy->getReturnType(),

true

);

2141 if

(

const auto

*FNPTy = dyn_cast<FunctionNoProtoType>(Ty))

2142

CheckType(FNPTy->getReturnType(),

true

);

2151

loc = getSourceManager().getExpansionLoc(loc);

2155 if

(getPreprocessor().getSpelling(loc, buffer) == name) {

2167

Ctx = Ctx->getPrimaryContext();

2168 for

(

Scope

*S = getCurScope(); S; S = S->getParent()) {

2173 if

(Ctx == Entity->getPrimaryContext())

2182 if

(FunctionScopes.empty() && CachedFunctionScope) {

2184

CachedFunctionScope->Clear();

2185

FunctionScopes.push_back(CachedFunctionScope.release());

2189 if

(LangOpts.OpenMP)

2190

OpenMP().pushOpenMPFunctionRegion();

2195

BlockScope,

Block

));

2196

CapturingFunctionScopes++;

2201

FunctionScopes.push_back(LSI);

2202

CapturingFunctionScopes++;

2208

LSI->AutoTemplateParameterDepth = Depth;

2212 "Remove assertion if intentionally called in a non-lambda context."

);

2239 if

(!

Result

.isInvalid()) {

2259 VarDecl

*VD = BC.getVariable();

2260 if

(VD->

hasAttr

<BlocksAttr>()) {

2269 QualType

CapType = BC.getVariable()->getType();

2295

assert(!FunctionScopes.empty() &&

"mismatched push/pop!"

);

2302 if

(LangOpts.OpenMP)

2303

OpenMP().popOpenMPFunctionRegion(

Scope

.get());

2307

AnalysisWarnings.IssueWarnings(*WP,

Scope

.get(),

D

, BlockType);

2309 for

(

const auto

&PUD :

Scope

->PossiblyUnreachableDiags)

2310 Diag

(PUD.Loc, PUD.PD);

2317 if

(!

Scope

->isPlainFunction())

2318 Self

->CapturingFunctionScopes--;

2320 if

(

Scope

->isPlainFunction() && !

Self

->CachedFunctionScope)

2321 Self

->CachedFunctionScope.reset(

Scope

);

2327

getCurFunction()->CompoundScopes.push_back(

2333

assert(!CurFunction->

CompoundScopes

.empty() &&

"mismatched push/pop"

);

2339 return

getCurFunction()->hasUnrecoverableErrorOccurred();

2343 if

(!FunctionScopes.empty())

2344

FunctionScopes.back()->setHasBranchIntoScope();

2348 if

(!FunctionScopes.empty())

2349

FunctionScopes.back()->setHasBranchProtectedScope();

2353 if

(!FunctionScopes.empty())

2354

FunctionScopes.back()->setHasIndirectGoto();

2358 if

(!FunctionScopes.empty())

2359

FunctionScopes.back()->setHasMustTail();

2363 if

(FunctionScopes.empty())

2366 auto

CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back());

2367 if

(CurBSI && CurBSI->TheDecl &&

2368

!CurBSI->TheDecl->Encloses(CurContext)) {

2370

assert(!CodeSynthesisContexts.empty());

2378 if

(FunctionScopes.empty())

2381 for

(

int

e = FunctionScopes.size() - 1; e >= 0; --e) {

2382 if

(isa<sema::BlockScopeInfo>(FunctionScopes[e]))

2384 return

FunctionScopes[e];

2390 for

(

auto

*

Scope

: llvm::reverse(FunctionScopes)) {

2391 if

(

auto

*CSI = dyn_cast<CapturingScopeInfo>(

Scope

)) {

2392 auto

*LSI = dyn_cast<LambdaScopeInfo>(CSI);

2393 if

(LSI && LSI->Lambda && !LSI->Lambda->Encloses(CurContext) &&

2394

LSI->AfterParameterList) {

2398

assert(!CodeSynthesisContexts.empty());

2408 if

(FunctionScopes.empty())

2411 auto

I = FunctionScopes.rbegin();

2412 if

(IgnoreNonLambdaCapturingScope) {

2413 auto E

= FunctionScopes.rend();

2414 while

(I !=

E

&& isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I))

2419 auto

*CurLSI = dyn_cast<LambdaScopeInfo>(*I);

2420 if

(CurLSI && CurLSI->Lambda && CurLSI->CallOperator &&

2421

!CurLSI->Lambda->Encloses(CurContext) && CurLSI->AfterParameterList) {

2423

assert(!CodeSynthesisContexts.empty());

2434 return

(LSI->TemplateParams.size() ||

2435

LSI->GLTemplateParameterList) ? LSI :

nullptr

;

2442 if

(!LangOpts.RetainCommentsFromSystemHeaders &&

2443

SourceMgr.isInSystemHeader(Comment.

getBegin

()))

2449

StringRef MagicMarkerText;

2452

MagicMarkerText =

"///<"

;

2455

MagicMarkerText =

"/**<"

;

2460 Diag

(Comment.

getBegin

(), diag::warn_splice_in_doxygen_comment);

2463

llvm_unreachable(

"if this is an almost Doxygen comment, " 2464 "it should be ordinary"

);

2466 Diag

(Comment.

getBegin

(), diag::warn_not_a_doxygen_trailing_member_comment) <<

2474char

ExternalSemaSource::ID;

2484

llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {}

2492

OverloadSet.

clear

();

2495 bool

IsMemExpr =

false

;

2505

Overloads = dyn_cast<UnresolvedMemberExpr>(

E

.

IgnoreParens

());

2509 bool

Ambiguous =

false

;

2514

DeclsEnd = Overloads->

decls_end

(); it != DeclsEnd; ++it) {

2522

= dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) {

2523 if

(OverloadDecl->getMinRequiredArguments() == 0) {

2524 if

(!ZeroArgCallReturnTy.

isNull

() && !Ambiguous &&

2525

(!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() ||

2526

OverloadDecl->isCPUSpecificMultiVersion()))) {

2530

ZeroArgCallReturnTy = OverloadDecl->getReturnType();

2531

IsMV = OverloadDecl->isCPUDispatchMultiVersion() ||

2532

OverloadDecl->isCPUSpecificMultiVersion();

2540 return

!ZeroArgCallReturnTy.

isNull

();

2551

ZeroArgCallReturnTy = R.

get

()->

getType

();

2557 if

(

const auto

*DeclRef = dyn_cast<DeclRefExpr>(

E

.

IgnoreParens

())) {

2558 if

(

const auto

*Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {

2559 if

(Fun->getMinRequiredArguments() == 0)

2560

ZeroArgCallReturnTy = Fun->getReturnType();

2570 if

(!PointeeTy.

isNull

())

2575 if

(

const auto

*FPT = dyn_cast_if_present<FunctionProtoType>(FunTy)) {

2576 if

(FPT->getNumParams() == 0)

2597 unsigned

ShownOverloads = 0;

2598 unsigned

SuppressedOverloads = 0;

2600

DeclsEnd = Overloads.

end

(); It != DeclsEnd; ++It) {

2602

++SuppressedOverloads;

2606 const NamedDecl

*Fn = (*It)->getUnderlyingDecl();

2608 if

(

const auto

*FD = Fn->getAsFunction()) {

2610

!FD->

getAttr

<TargetAttr>()->isDefaultVersion())

2613

!FD->

getAttr

<TargetVersionAttr>()->isDefaultVersion())

2616

S.

Diag

(Fn->getLocation(), diag::note_possible_target_of_call);

2622 if

(SuppressedOverloads)

2623

S.

Diag

(FinalNoteLoc, diag::note_ovl_too_many_candidates)

2624

<< SuppressedOverloads;

2629 bool

(*IsPlausibleResult)(

QualType

)) {

2630 if

(!IsPlausibleResult)

2635

DeclsEnd = Overloads.

end

(); It != DeclsEnd; ++It) {

2636 const auto

*OverloadDecl = cast<FunctionDecl>(*It);

2637 QualType

OverloadResultTy = OverloadDecl->getReturnType();

2638 if

(IsPlausibleResult(OverloadResultTy))

2639

PlausibleOverloads.

addDecl

(It.getDecl());

2650 return

(!isa<CStyleCastExpr>(

E

) &&

2651

!isa<UnaryOperator>(

E

) &&

2652

!isa<BinaryOperator>(

E

) &&

2653

!isa<CXXOperatorCallExpr>(

E

));

2657 if

(

const auto

*UO = dyn_cast<UnaryOperator>(

E

))

2658 E

= UO->getSubExpr();

2660 if

(

const auto

*ULE = dyn_cast<UnresolvedLookupExpr>(

E

)) {

2661 if

(ULE->getNumDecls() == 0)

2664 const NamedDecl

*ND = *ULE->decls_begin();

2665 if

(

const auto

*FD = dyn_cast<FunctionDecl>(ND))

2673 bool

(*IsPlausibleResult)(

QualType

)) {

2680 if

(!isSFINAEContext()) {

2682 if

(tryExprAsCall(*

E

.get(), ZeroArgCallTy, Overloads) &&

2683

!ZeroArgCallTy.

isNull

() &&

2684

(!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {

2701 E

= BuildCallExpr(

nullptr

,

E

.get(),

Range

.

getEnd

(), {},

2706 if

(!ForceComplain)

return false

;

2718

Ident_super = &Context.

Idents

.

get

(

"super"

);

2724 unsigned

OpenMPCaptureLevel) {

2728

? OpenMP().getOpenMPNestingLevel()

2730

OpenMPCaptureLevel);

2731

CSI->ReturnType = Context.

VoidTy

;

2732

FunctionScopes.push_back(CSI);

2733

CapturingFunctionScopes++;

2737 if

(FunctionScopes.empty())

2740 return

dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back());

2743const

llvm::MapVector<FieldDecl *, Sema::DeleteLocs> &

2749

: S(S), OldFPFeaturesState(S.CurFPFeatures),

2750

OldOverrides(S.FpPragmaStack.CurrentValue),

2751

OldEvalMethod(S.PP.getCurrentFPEvalMethod()),

2752

OldFPPragmaLocation(S.PP.getLastFPEvalPragmaLocation()) {}

2761

assert(

D

.getCXXScopeSpec().isSet() &&

2762 "can only be called for qualified names"

);

2767

!

D

.getDeclSpec().isFriendSpecified());

2772 bool Result

= llvm::all_of(LR, [](

Decl

*Dcl) {

2773 if

(

NamedDecl

*ND = dyn_cast<NamedDecl>(Dcl)) {

2774

ND = ND->getUnderlyingDecl();

2775 return

isa<FunctionDecl>(ND) || isa<FunctionTemplateDecl>(ND) ||

2786 auto

*A = AnnotateAttr::Create(

Context

, Annot, Args.data(), Args.size(), CI);

2803 for

(

unsigned

Idx = 1; Idx < AL.

getNumArgs

(); Idx++) {

Defines the clang::ASTContext interface.

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

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

llvm::DenseSet< const void * > Visited

llvm::MachO::FileType FileType

Implements a partial diagnostic that can be emitted anwyhere in a DiagnosticBuilder stream.

Defines the clang::Preprocessor interface.

This file declares semantic analysis functions specific to AMDGPU.

This file declares semantic analysis functions specific to ARM.

This file declares semantic analysis functions specific to AVR.

This file declares semantic analysis functions specific to BPF.

This file declares semantic analysis for CUDA constructs.

This file declares facilities that support code completion.

This file declares semantic analysis for HLSL constructs.

This file declares semantic analysis functions specific to Hexagon.

This file declares semantic analysis functions specific to LoongArch.

This file declares semantic analysis functions specific to M68k.

This file declares semantic analysis functions specific to MIPS.

This file declares semantic analysis functions specific to MSP430.

This file declares semantic analysis functions specific to NVPTX.

This file declares semantic analysis for Objective-C.

This file declares semantic analysis for OpenACC constructs and clauses.

This file declares semantic analysis routines for OpenCL.

This file declares semantic analysis for OpenMP constructs and clauses.

This file declares semantic analysis functions specific to PowerPC.

This file declares semantic analysis for expressions involving.

This file declares semantic analysis functions specific to RISC-V.

This file declares semantic analysis for SPIRV constructs.

This file declares semantic analysis for SYCL constructs.

This file declares semantic analysis functions specific to Swift.

This file declares semantic analysis functions specific to SystemZ.

This file declares semantic analysis functions specific to Wasm.

This file declares semantic analysis functions specific to X86.

static void checkEscapingByref(VarDecl *VD, Sema &S)

static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E)

llvm::DenseMap< const CXXRecordDecl *, bool > RecordCompleteMap

static bool IsCallableWithAppend(const Expr *E)

Determine whether the given expression can be called by just putting parentheses after it.

static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD, RecordCompleteMap &MNCComplete)

Returns true, if all methods and nested classes of the given CXXRecordDecl are defined in this transl...

static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc)

Give notes for a set of overloads.

static bool isFunctionOrVarDeclExternC(const NamedDecl *ND)

static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S)

static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D)

Used to prune the decls of Sema's UnusedFileScopedDecls vector.

static void emitCallStackNotes(Sema &S, const FunctionDecl *FD)

static void notePlausibleOverloads(Sema &S, SourceLocation Loc, const UnresolvedSetImpl &Overloads, bool(*IsPlausibleResult)(QualType))

static void checkUndefinedButUsed(Sema &S)

checkUndefinedButUsed - Check for undefined objects with internal linkage or that are inline.

static bool IsRecordFullyDefined(const CXXRecordDecl *RD, RecordCompleteMap &RecordsComplete, RecordCompleteMap &MNCComplete)

Returns true, if the given CXXRecordDecl is fully defined in this translation unit,...

Defines the SourceManager interface.

Allows QualTypes to be sorted and hence used in maps and sets.

ASTConsumer - This is an abstract interface that should be implemented by clients that read ASTs.

virtual void CompleteTentativeDefinition(VarDecl *D)

CompleteTentativeDefinition - Callback invoked at the end of a translation unit to notify the consume...

virtual ASTMutationListener * GetASTMutationListener()

If the consumer is interested in entities getting modified after their initial creation,...

virtual void CompleteExternalDeclaration(DeclaratorDecl *D)

CompleteExternalDeclaration - Callback invoked at the end of a translation unit to notify the consume...

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

SourceManager & getSourceManager()

TranslationUnitDecl * getTranslationUnitDecl() const

QualType getAtomicType(QualType T) const

Return the uniqued reference to the atomic type for the specified type.

TypedefDecl * getObjCClassDecl() const

Retrieve the typedef declaration corresponding to the predefined Objective-C 'Class' type.

TypedefDecl * getCFConstantStringDecl() const

const llvm::fltSemantics & getFloatTypeSemantics(QualType T) const

Return the APFloat 'semantics' for the specified scalar floating point type.

TypedefDecl * getObjCSelDecl() const

Retrieve the typedef corresponding to the predefined 'SEL' type in Objective-C.

TypedefDecl * buildImplicitTypedef(QualType T, StringRef Name) const

Create a new implicit TU-level typedef declaration.

TypedefDecl * getBuiltinMSVaListDecl() const

Retrieve the C type declaration corresponding to the predefined __builtin_ms_va_list type.

TypedefDecl * getObjCIdDecl() const

Retrieve the typedef corresponding to the predefined id type in Objective-C.

CanQualType getCanonicalType(QualType T) const

Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...

ArrayRef< Decl * > getModuleInitializers(Module *M)

Get the initializations to perform when importing a module, if any.

void addComment(const RawComment &RC)

RecordDecl * buildImplicitRecord(StringRef Name, RecordDecl::TagKind TK=RecordDecl::TagKind::Struct) const

Create a new implicit TU-level CXXRecordDecl or RecordDecl declaration.

const IncompleteArrayType * getAsIncompleteArrayType(QualType T) const

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

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

const LangOptions & getLangOpts() const

QualType getUIntPtrType() const

Return a type compatible with "uintptr_t" (C99 7.18.1.4), as defined by the target.

PartialDiagnostic::DiagStorageAllocator & getDiagAllocator()

QualType getPointerDiffType() const

Return the unique type for "ptrdiff_t" (C99 7.17) defined in <stddef.h>.

const TargetInfo * getAuxTargetInfo() const

CanQualType UnsignedLongTy

bool hasAnyFunctionEffects() const

CanQualType getSizeType() const

Return the unique type for "size_t" (C99 7.17), defined in <stddef.h>.

CanQualType BoundMemberTy

TypedefDecl * getInt128Decl() const

Retrieve the declaration for the 128-bit signed integer type.

LangAS getDefaultOpenCLPointeeAddrSpace()

Returns default address space based on OpenCL version and enabled features.

CanQualType OCLClkEventTy

TypedefDecl * getUInt128Decl() const

Retrieve the declaration for the 128-bit unsigned integer type.

const clang::PrintingPolicy & getPrintingPolicy() const

uint64_t getTypeSize(QualType T) const

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

ObjCInterfaceDecl * getObjCProtocolDecl() const

Retrieve the Objective-C class declaration corresponding to the predefined Protocol class.

TypedefDecl * getBuiltinVaListDecl() const

Retrieve the C type declaration corresponding to the predefined __builtin_va_list type.

CanQualType UnsignedIntTy

CanQualType OCLReserveIDTy

const TargetInfo & getTargetInfo() const

void getFunctionFeatureMap(llvm::StringMap< bool > &FeatureMap, const FunctionDecl *) const

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

Set the copy initialization expression of a block var decl.

ExternalASTSource * getExternalSource() const

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

QualType getIntPtrType() const

Return a type compatible with "intptr_t" (C99 7.18.1.4), as defined by the target.

IdentifierInfo * getBoolName() const

Retrieve the identifier 'bool'.

void setPrintingPolicy(const clang::PrintingPolicy &Policy)

An abstract interface that should be implemented by listeners that want to be notified when an AST en...

Attr - This represents one attribute.

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

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

ArrayRef< Capture > captures() const

SourceLocation getCaretLocation() const

bool doesNotEscape() const

Represents a C++ destructor within a class.

CXXFieldCollector - Used to keep track of CXXFieldDecls during parsing of C++ classes.

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

An iterator over the friend declarations of a class.

Represents a C++ struct/union/class.

friend_iterator friend_begin() const

friend_iterator friend_end() const

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

ImplicitParamDecl * getContextParam() const

Retrieve the parameter containing captured variables.

const char * getCastKindName() const

Abstract interface for a consumer of code-completion information.

The information about the darwin SDK that was used during this compilation.

decl_iterator - Iterates through the declarations stored within this context.

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.

decl_iterator decls_end() const

decl_iterator decls_begin() const

A reference to a declared variable, function, enum, etc.

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 ...

void setInvalidDecl(bool Invalid=true)

setInvalidDecl - Indicates the Decl had a semantic error.

bool isReferenced() const

Whether any declaration of this entity was referenced.

bool isInvalidDecl() const

SourceLocation getLocation() const

bool isUsed(bool CheckUsedAttr=true) const

Whether any (re-)declaration of the entity was used, meaning that a definition is required.

DeclContext * getDeclContext()

SourceLocation getBeginLoc() const LLVM_READONLY

The name of a declaration.

Represents a ValueDecl that came out of a declarator.

Information about one declarator, including the parsed type information and the identifier.

A little helper class used to produce diagnostics.

static SFINAEResponse getDiagnosticSFINAEResponse(unsigned DiagID)

Determines whether the given built-in diagnostic ID is for an error that is suppressed if it occurs d...

@ SFINAE_SubstitutionFailure

The diagnostic should not be reported, but it should cause template argument deduction to fail.

@ SFINAE_Suppress

The diagnostic should be suppressed entirely.

@ SFINAE_AccessControl

The diagnostic is an access-control diagnostic, which will be substitution failures in some contexts ...

@ SFINAE_Report

The diagnostic should be reported.

A little helper class (which is basically a smart pointer that forwards info from DiagnosticsEngine a...

const SourceLocation & getLocation() const

DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)

Issue the message to the client.

void SetArgToStringFn(ArgToStringFnTy Fn, void *Cookie)

bool EmitDiagnostic(const DiagnosticBuilder &DB, bool Force=false)

Emit the diagnostic.

bool hasErrorOccurred() const

void overloadCandidatesShown(unsigned N)

Call this after showing N overload candidates.

void setLastDiagnosticIgnored(bool Ignored)

Pretend that the last diagnostic issued was ignored, so any subsequent notes will be suppressed,...

unsigned getNumOverloadCandidatesToShow() const

When a call or operator fails, print out up to this many candidate overloads as suggestions.

bool hasFatalErrorOccurred() const

bool isIgnored(unsigned DiagID, SourceLocation Loc) const

Determine whether the diagnostic is known to be ignored.

Level getDiagnosticLevel(unsigned DiagID, SourceLocation Loc) const

Based on the way the client configured the DiagnosticsEngine object, classify the specified diagnosti...

bool getSuppressSystemWarnings() const

const IntrusiveRefCntPtr< DiagnosticIDs > & getDiagnosticIDs() const

RAII object that enters a new expression evaluation context.

This represents one expression.

bool isTypeDependent() const

Determines whether the type of this expression depends on.

Expr * IgnoreParenImpCasts() LLVM_READONLY

Skip past any parentheses and implicit casts which might surround this expression until reaching a fi...

Expr * IgnoreImplicit() LLVM_READONLY

Skip past any implicit AST nodes which might surround this expression until reaching a fixed point.

Expr * IgnoreParens() LLVM_READONLY

Skip past any parentheses which might surround this expression until reaching a fixed point.

SourceLocation getExprLoc() const LLVM_READONLY

getExprLoc - Return the preferred location for the arrow when diagnosing a problem with a generic exp...

An abstract interface that should be implemented by external AST sources that also provide informatio...

virtual void updateOutOfDateSelector(Selector Sel)

Load the contents of the global method pool for a given selector if necessary.

virtual void ReadMethodPool(Selector Sel)

Load the contents of the global method pool for a given selector.

virtual void ReadUndefinedButUsed(llvm::MapVector< NamedDecl *, SourceLocation > &Undefined)

Load the set of used but not defined functions or variables with internal linkage,...

~ExternalSemaSource() override

virtual void ReadKnownNamespaces(SmallVectorImpl< NamespaceDecl * > &Namespaces)

Load the set of namespaces that are known to the external source, which will be used during typo corr...

virtual void ReadMismatchingDeleteExpressions(llvm::MapVector< FieldDecl *, llvm::SmallVector< std::pair< SourceLocation, bool >, 4 > > &)

Represents difference between two FPOptions values.

Represents a member of a struct/union/class.

StringRef getName() const

The name of this FileEntry.

An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...

llvm::vfs::FileSystem & getVirtualFileSystem() const

Annotates a diagnostic with some code that should be inserted, removed, or replaced to fix the proble...

static FixItHint CreateReplacement(CharSourceRange RemoveRange, StringRef Code)

Create a code modification hint that replaces the given source range with the given code string.

static FixItHint CreateInsertion(SourceLocation InsertionLoc, StringRef Code, bool BeforePreviousInsertions=false)

Create a code modification hint that inserts the given code string at a specific location.

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 isCPUSpecificMultiVersion() const

True if this function is a multiversioned processor specific function as a part of the cpu_specific/c...

bool isDeleted() const

Whether this function has been deleted.

bool isCPUDispatchMultiVersion() const

True if this function is a multiversioned dispatch function as a part of the cpu_specific/cpu_dispatc...

bool isDefaulted() const

Whether this function is defaulted.

const ASTTemplateArgumentListInfo * getTemplateSpecializationArgsAsWritten() const

Retrieve the template argument list as written in the sources, if any.

static FunctionEffectsRef get(QualType QT)

Extract the effects from a Type if it is a function, block, or member function pointer,...

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

Declaration of a template function.

FunctionType - C99 6.7.5.3 - Function Declarators.

QualType getReturnType() const

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

StringRef getName() const

Return the actual identifier string.

iterator begin(DeclarationName Name)

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

iterator end()

Returns the end iterator.

IdentifierInfo & get(StringRef Name)

Return the identifier token info for the specified named identifier.

ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...

static ImplicitCastExpr * Create(const ASTContext &Context, QualType T, CastKind Kind, Expr *Operand, const CXXCastPath *BasePath, ExprValueKind Cat, FPOptionsOverride FPO)

Represents a C array with an unspecified size.

static InitializedEntity InitializeBlock(SourceLocation BlockVarLoc, QualType Type)

@ CMK_HeaderUnit

Compiling a module header unit.

@ CMK_ModuleInterface

Compiling a C++ modules interface unit.

bool IsHeaderFile

Indicates whether the front-end is explicitly told that the input is a header file (i....

CommentOptions CommentOpts

Options for parsing comments.

unsigned getOpenCLCompatibleVersion() const

Return the OpenCL version that kernel language is compatible with.

void erase(iterator From, iterator To)

iterator begin(Source *source, bool LocalOnly=false)

static SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset, const SourceManager &SM, const LangOptions &LangOpts)

Computes the source location just past the end of the token at this source location.

Represents the results of name lookup.

Encapsulates the data about a macro definition (e.g.

Abstract interface for a module loader.

bool resolveExports(Module *Mod, bool Complain)

Resolve all of the unresolved exports in the given module.

bool resolveConflicts(Module *Mod, bool Complain)

Resolve all of the unresolved conflicts in the given module.

bool resolveUses(Module *Mod, bool Complain)

Resolve all of the unresolved uses in the given module.

Describes a module or submodule.

bool isNamedModuleInterfaceHasInit() const

bool isInterfaceOrPartition() const

llvm::SmallSetVector< Module *, 2 > Imports

The set of modules imported by this module, and on which this module depends.

llvm::iterator_range< submodule_iterator > submodules()

@ PrivateModuleFragment

This is the private module fragment within some C++ module.

@ ExplicitGlobalModuleFragment

This is the explicit Global Module Fragment of a modular TU.

An abstract interface that should be implemented by external AST sources that also provide informatio...

static const unsigned NumNSNumberLiteralMethods

This represents a decl that may have a name.

bool hasExternalFormalLinkage() const

True if this decl has external linkage.

bool isExternallyVisible() const

This represents '#pragma omp target' directive.

ObjCMethodDecl - Represents an instance or class method declaration.

void addSupport(const llvm::StringMap< bool > &FeaturesMap, const LangOptions &Opts)

A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr.

static FindResult find(Expr *E)

Finds the overloaded expression in the given expression E of OverloadTy.

decls_iterator decls_begin() const

decls_iterator decls_end() const

This interface provides a way to observe the actions of the preprocessor as it does its thing.

ParsedAttr - Represents a syntactic attribute.

unsigned getNumArgs() const

getNumArgs - Return the number of actual arguments to this attribute.

bool isArgIdent(unsigned Arg) const

Expr * getArgAsExpr(unsigned Arg) const

unsigned getDiagID() const

void Emit(const DiagnosticBuilder &DB) const

Engages in a tight little dance with the lexer to efficiently preprocess tokens.

bool isIncrementalProcessingEnabled() const

Returns true if incremental processing is enabled.

const MacroInfo * getMacroInfo(const IdentifierInfo *II) const

LangOptions::FPEvalMethodKind getCurrentFPEvalMethod() const

const TranslationUnitKind TUKind

The kind of translation unit we are processing.

ModuleLoader & getModuleLoader() const

Retrieve the module loader associated with this preprocessor.

void addPPCallbacks(std::unique_ptr< PPCallbacks > C)

IdentifierInfo * getIdentifierInfo(StringRef Name) const

Return information about the specified preprocessor identifier token.

Module * getCurrentModule()

Retrieves the module that we're currently building, if any.

void setCurrentFPEvalMethod(SourceLocation PragmaLoc, LangOptions::FPEvalMethodKind Val)

FileManager & getFileManager() const

bool isCodeCompletionEnabled() const

Determine if we are performing code completion.

HeaderSearch & getHeaderSearchInfo() const

const LangOptions & getLangOpts() const

A (possibly-)qualified type.

bool hasNonTrivialToPrimitiveCopyCUnion() const

Check if this is or contains a C union that is non-trivial to copy, which is a union that has a membe...

bool isNull() const

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

bool hasNonTrivialToPrimitiveDestructCUnion() const

Check if this is or contains a C union that is non-trivial to destruct, which is a union that has a m...

QualType getCanonicalType() const

QualType getUnqualifiedType() const

Retrieve the unqualified variant of the given type, removing as little sugar as possible.

bool isConstQualified() const

Determine whether this type is const-qualified.

Represents a struct/union/class.

decl_type * getMostRecentDecl()

Returns the most recent (re)declaration of this declaration.

Scope - A scope is a transient data structure that is used while parsing the program.

@ TemplateParamScope

This is a scope that corresponds to the template parameters of a C++ template.

@ DeclScope

This is a scope that can contain a declaration.

Smart pointer class that efficiently represents Objective-C method names.

A generic diagnostic builder for errors which may or may not be deferred.

@ K_Immediate

Emit the diagnostic immediately (i.e., behave like Sema::Diag()).

SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID, bool DeferHint=false)

Emit a diagnostic.

PartialDiagnostic PDiag(unsigned DiagID=0)

Build a partial diagnostic.

const LangOptions & getLangOpts() const

DiagnosticsEngine & getDiagnostics() const

llvm::DenseMap< CanonicalDeclPtr< const FunctionDecl >, FunctionDeclAndLoc > DeviceKnownEmittedFns

An inverse call graph, mapping known-emitted functions to one of their known-emitted callers (plus th...

An abstract interface that should be implemented by clients that read ASTs and then require further s...

void DiagnoseAvailabilityViolations(TranslationUnitDecl *TU)

ObjCMethodDecl * NSNumberLiteralMethods[NSAPI::NumNSNumberLiteralMethods]

The Objective-C NSNumber methods used to create NSNumber literals.

void DiagnoseUseOfUnimplementedSelectors()

std::unique_ptr< NSAPI > NSAPIObj

Caches identifiers/selectors for NSFoundation APIs.

void DiagnoseUnterminatedOpenMPDeclareTarget()

Report unterminated 'omp declare target' or 'omp begin declare target' at the end of a compilation un...

void finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc)

Finishes analysis of the deferred functions calls that may be declared as host/nohost during device/h...

A class which encapsulates the logic for delaying diagnostics during parsing and other processing.

sema::DelayedDiagnosticPool * getCurrentPool() const

Returns the current delayed-diagnostics pool.

FPFeaturesStateRAII(Sema &S)

Custom deleter to allow FunctionScopeInfos to be kept alive for a short time after they've been poppe...

void operator()(sema::FunctionScopeInfo *Scope) const

RAII class used to indicate that we are performing provisional semantic analysis to determine the val...

Sema - This implements semantic analysis and AST building for C.

SmallVector< DeclaratorDecl *, 4 > ExternalDeclarations

All the external declarations encoutered and used in the TU.

bool ConstantFoldAttrArgs(const AttributeCommonInfo &CI, MutableArrayRef< Expr * > Args)

ConstantFoldAttrArgs - Folds attribute arguments into ConstantExprs (unless they are value dependent ...

SmallVector< CodeSynthesisContext, 16 > CodeSynthesisContexts

List of active code synthesis contexts.

sema::CapturingScopeInfo * getEnclosingLambdaOrBlock() const

Get the innermost lambda or block enclosing the current location, if any.

void LoadExternalWeakUndeclaredIdentifiers()

Load weak undeclared identifiers from the external source.

bool isExternalWithNoLinkageType(const ValueDecl *VD) const

Determine if VD, which must be a variable or function, is an external symbol that nonetheless can't b...

bool tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, UnresolvedSetImpl &NonTemplateOverloads)

Figure out if an expression could be turned into a call.

@ LookupOrdinaryName

Ordinary name lookup, which finds ordinary names (functions, variables, typedefs, etc....

void addImplicitTypedef(StringRef Name, QualType T)

void CheckDelegatingCtorCycles()

SmallVector< CXXMethodDecl *, 4 > DelayedDllExportMemberFunctions

const TranslationUnitKind TUKind

The kind of translation unit we are processing.

llvm::SmallSetVector< const TypedefNameDecl *, 4 > UnusedLocalTypedefNameCandidates

Set containing all typedefs that are likely unused.

void emitAndClearUnusedLocalTypedefWarnings()

std::unique_ptr< CXXFieldCollector > FieldCollector

FieldCollector - Collects CXXFieldDecls during parsing of C++ classes.

void Initialize()

Perform initialization that occurs after the parser has been initialized but before it parses anythin...

SmallVector< sema::FunctionScopeInfo *, 4 > FunctionScopes

Stack containing information about each of the nested function, block, and method scopes that are cur...

PoppedFunctionScopePtr PopFunctionScopeInfo(const sema::AnalysisBasedWarnings::Policy *WP=nullptr, const Decl *D=nullptr, QualType BlockType=QualType())

Pop a function (or block or lambda or captured region) scope from the stack.

Scope * getScopeForContext(DeclContext *Ctx)

Determines the active Scope associated with the given declaration context.

llvm::DenseSet< std::pair< Decl *, unsigned > > InstantiatingSpecializations

Specializations whose definitions are currently being instantiated.

PragmaStack< FPOptionsOverride > FpPragmaStack

void setFunctionHasBranchIntoScope()

virtual void anchor()

This virtual key function only exists to limit the emission of debug info describing the Sema class.

void ActOnComment(SourceRange Comment)

void ActOnEndOfTranslationUnit()

ActOnEndOfTranslationUnit - This is called at the very end of the translation unit when EOF is reache...

FPOptionsOverride CurFPFeatureOverrides()

void ActOnTranslationUnitScope(Scope *S)

Scope actions.

NamedDecl * LookupSingleName(Scope *S, DeclarationName Name, SourceLocation Loc, LookupNameKind NameKind, RedeclarationKind Redecl=RedeclarationKind::NotForRedeclaration)

Look up a name, looking for a single declaration.

IdentifierInfo * getSuperIdentifier() const

FunctionDecl * getCurFunctionDecl(bool AllowLambda=false) const

Returns a pointer to the innermost enclosing function, or nullptr if the current context is not insid...

void DiagnosePrecisionLossInComplexDivision()

void diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType, SourceLocation Loc)

Warn if we're implicitly casting from a _Nullable pointer type to a _Nonnull one.

DiagnosticsEngine & getDiagnostics() const

bool tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, bool ForceComplain=false, bool(*IsPlausibleResult)(QualType)=nullptr)

Try to recover by turning the given expression into a call.

SemaDiagnosticBuilder::DeferredDiagnosticsType DeviceDeferredDiags

Diagnostics that are emitted only if we discover that the given function must be codegen'ed.

void CheckDelayedMemberExceptionSpecs()

void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext=true)

Add this decl to the scope shadowed decl chains.

UnusedFileScopedDeclsType UnusedFileScopedDecls

The set of file scoped decls seen so far that have not been used and must warn if not used.

ASTContext & getASTContext() const

SmallVector< std::pair< FunctionDecl *, FunctionDecl * >, 2 > DelayedEquivalentExceptionSpecChecks

All the function redeclarations seen during a class definition that had their exception spec checks d...

ExprResult ImpCastExprToType(Expr *E, QualType Type, CastKind CK, ExprValueKind VK=VK_PRValue, const CXXCastPath *BasePath=nullptr, CheckedConversionKind CCK=CheckedConversionKind::Implicit)

ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.

static const unsigned MaxAlignmentExponent

The maximum alignment, same as in llvm::Value.

bool shouldIgnoreInHostDeviceCheck(FunctionDecl *Callee)

PrintingPolicy getPrintingPolicy() const

Retrieve a suitable printing policy for diagnostics.

ObjCMethodDecl * getCurMethodDecl()

getCurMethodDecl - If inside of a method body, this returns a pointer to the method decl for the meth...

sema::LambdaScopeInfo * getCurGenericLambda()

Retrieve the current generic lambda info, if any.

unsigned NumSFINAEErrors

The number of SFINAE diagnostics that have been trapped.

void setFunctionHasIndirectGoto()

LangAS getDefaultCXXMethodAddrSpace() const

Returns default addr space for method qualifiers.

void PushFunctionScope()

Enter a new function scope.

std::unique_ptr< sema::FunctionScopeInfo, PoppedFunctionScopeDeleter > PoppedFunctionScopePtr

Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer, TranslationUnitKind TUKind=TU_Complete, CodeCompleteConsumer *CompletionConsumer=nullptr)

SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset=0)

Calls Lexer::getLocForEndOfToken()

sema::LambdaScopeInfo * PushLambdaScope()

const LangOptions & getLangOpts() const

const FunctionProtoType * ResolveExceptionSpec(SourceLocation Loc, const FunctionProtoType *FPT)

ASTConsumer & getASTConsumer() const

threadSafety::BeforeSet * ThreadSafetyDeclCache

void checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D=nullptr)

Check if the type is allowed to be used for the current target.

const LangOptions & LangOpts

sema::LambdaScopeInfo * getCurLambda(bool IgnoreNonLambdaCapturingScope=false)

Retrieve the current lambda scope info, if any.

static const uint64_t MaximumAlignment

void PerformPendingInstantiations(bool LocalOnly=false)

Performs template instantiation for all implicit template instantiations we have seen until this poin...

NamedDeclSetType UnusedPrivateFields

Set containing all declared private fields that are not used.

void ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind)

bool ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const

IdentifierInfo * InventAbbreviatedTemplateParameterTypeName(const IdentifierInfo *ParamName, unsigned Index)

Invent a new identifier for parameters of abbreviated templates.

SmallVector< PendingImplicitInstantiation, 1 > LateParsedInstantiations

Queue of implicit template instantiations that cannot be performed eagerly.

void performFunctionEffectAnalysis(TranslationUnitDecl *TU)

SmallVector< std::pair< const CXXMethodDecl *, const CXXMethodDecl * >, 2 > DelayedOverridingExceptionSpecChecks

All the overriding functions seen during a class definition that had their exception spec checks dela...

NamedDecl * getCurFunctionOrMethodDecl() const

getCurFunctionOrMethodDecl - Return the Decl for the current ObjC method or C function we're in,...

static CastKind ScalarTypeToBooleanCastKind(QualType ScalarTy)

ScalarTypeToBooleanCastKind - Returns the cast kind corresponding to the conversion from scalar type ...

void PushCompoundScope(bool IsStmtExpr)

bool isDeclaratorFunctionLike(Declarator &D)

Determine whether.

std::optional< sema::TemplateDeductionInfo * > isSFINAEContext() const

Determines whether we are currently in a context where template argument substitution failures are no...

bool findMacroSpelling(SourceLocation &loc, StringRef name)

Looks through the macro-expansion chain for the given location, looking for a macro expansion with th...

FunctionEmissionStatus getEmissionStatus(const FunctionDecl *Decl, bool Final=false)

Module * getCurrentModule() const

Get the module unit whose scope we are currently within.

static bool isCast(CheckedConversionKind CCK)

sema::BlockScopeInfo * getCurBlock()

Retrieve the current block, if any.

DeclContext * CurContext

CurContext - This is the current declaration context of parsing.

MaterializeTemporaryExpr * CreateMaterializeTemporaryExpr(QualType T, Expr *Temporary, bool BoundToLvalueReference)

DeclContext * getFunctionLevelDeclContext(bool AllowLambda=false) const

If AllowLambda is true, treat lambda as function.

bool DefineUsedVTables()

Define all of the vtables that have been used in this translation unit and reference any virtual memb...

bool inTemplateInstantiation() const

Determine whether we are currently performing template instantiation.

SourceManager & getSourceManager() const

bool makeUnavailableInSystemHeader(SourceLocation loc, UnavailableAttr::ImplicitReason reason)

makeUnavailableInSystemHeader - There is an error in the current context.

void getUndefinedButUsed(SmallVectorImpl< std::pair< NamedDecl *, SourceLocation > > &Undefined)

Obtain a sorted list of functions that are undefined but ODR-used.

void diagnoseFunctionEffectConversion(QualType DstType, QualType SrcType, SourceLocation Loc)

Warn when implicitly changing function effects.

ExprResult PerformMoveOrCopyInitialization(const InitializedEntity &Entity, const NamedReturnInfo &NRInfo, Expr *Value, bool SupressSimplerImplicitMoves=false)

Perform the initialization of a potentially-movable value, which is the result of return value.

void DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc)

CanThrowResult canThrow(const Stmt *E)

bool AccessCheckingSFINAE

When true, access checking violations are treated as SFINAE failures rather than hard errors.

DeclContext * computeDeclContext(QualType T)

Compute the DeclContext that is associated with the given type.

void PushBlockScope(Scope *BlockScope, BlockDecl *Block)

void * VisContext

VisContext - Manages the stack for #pragma GCC visibility.

void PushCapturedRegionScope(Scope *RegionScope, CapturedDecl *CD, RecordDecl *RD, CapturedRegionKind K, unsigned OpenMPCaptureLevel=0)

void setFunctionHasMustTail()

void CheckCompleteVariableDeclaration(VarDecl *VD)

@ Global

The global module fragment, between 'module;' and a module-declaration.

@ Private

The private module fragment, between 'module :private;' and the end of the translation unit.

@ Normal

A normal translation unit fragment.

void setFunctionHasBranchProtectedScope()

RedeclarationKind forRedeclarationInCurContext() const

void ActOnStartOfTranslationUnit()

This is called before the very first declaration in the translation unit is parsed.

llvm::SmallPtrSet< const Decl *, 4 > ParsingInitForAutoVars

ParsingInitForAutoVars - a set of declarations with auto types for which we are currently parsing the...

@ NonDefaultStateAtInclude

sema::AnalysisBasedWarnings AnalysisWarnings

Worker object for performing CFG-based warnings.

bool hasUncompilableErrorOccurred() const

Whether uncompilable error has occurred.

std::deque< PendingImplicitInstantiation > PendingInstantiations

The queue of implicit template instantiations that are required but have not yet been performed.

ModuleLoader & getModuleLoader() const

Retrieve the module loader associated with the preprocessor.

@ PotentiallyEvaluated

The current expression is potentially evaluated at run time, which means that code may be generated t...

std::pair< SourceLocation, bool > DeleteExprLoc

void RecordParsingTemplateParameterDepth(unsigned Depth)

This is used to inform Sema what the current TemplateParameterDepth is during Parsing.

bool RequireCompleteType(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser &Diagnoser)

Ensure that the type T is a complete type.

Scope * TUScope

Translation Unit Scope - useful to Objective-C actions that need to lookup file scope declarations in...

void DiagnoseUnterminatedPragmaAttribute()

void FreeVisContext()

FreeVisContext - Deallocate and null out VisContext.

bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx, bool InUnqualifiedLookup=false)

Perform qualified name lookup into a given context.

llvm::MapVector< FieldDecl *, DeleteLocs > DeleteExprs

Delete-expressions to be analyzed at the end of translation unit.

TentativeDefinitionsType TentativeDefinitions

All the tentative definitions encountered in the TU.

Expr * MaybeCreateExprWithCleanups(Expr *SubExpr)

MaybeCreateExprWithCleanups - If the current full-expression requires any cleanups,...

DarwinSDKInfo * getDarwinSDKInfoForAvailabilityChecking()

const llvm::MapVector< FieldDecl *, DeleteLocs > & getMismatchingDeleteExpressions() const

Retrieves list of suspicious delete-expressions that will be checked at the end of translation unit.

SmallVector< ExpressionEvaluationContextRecord, 8 > ExprEvalContexts

A stack of expression evaluation contexts.

void PushDeclContext(Scope *S, DeclContext *DC)

Set the current declaration context until it gets popped.

SourceManager & SourceMgr

DiagnosticsEngine & Diags

void DiagnoseUnterminatedPragmaAlignPack()

OpenCLOptions & getOpenCLOptions()

LateTemplateParserCleanupCB * LateTemplateParserCleanup

ExprResult PerformCopyInitialization(const InitializedEntity &Entity, SourceLocation EqualLoc, ExprResult Init, bool TopLevelOfInitList=false, bool AllowExplicit=false)

Attr * CreateAnnotationAttr(const AttributeCommonInfo &CI, StringRef Annot, MutableArrayRef< Expr * > Args)

CreateAnnotationAttr - Creates an annotation Annot with Args arguments.

llvm::MapVector< NamedDecl *, SourceLocation > UndefinedButUsed

UndefinedInternals - all the used, undefined objects which require a definition in this translation u...

void PrintStats() const

Print out statistics about the semantic analysis.

llvm::BumpPtrAllocator BumpAlloc

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

Run some code with "sufficient" stack space.

void addExternalSource(ExternalSemaSource *E)

Registers an external source.

SmallVector< CXXRecordDecl *, 4 > DelayedDllExportClasses

llvm::MapVector< IdentifierInfo *, llvm::SetVector< WeakInfo, llvm::SmallVector< WeakInfo, 1u >, llvm::SmallDenseSet< WeakInfo, 2u, WeakInfo::DenseMapInfoByAliasOnly > > > WeakUndeclaredIdentifiers

WeakUndeclaredIdentifiers - Identifiers contained in #pragma weak before declared.

SemaDiagnosticBuilder targetDiag(SourceLocation Loc, unsigned DiagID, const FunctionDecl *FD=nullptr)

DeclarationName VAListTagName

VAListTagName - The declaration name corresponding to __va_list_tag.

sema::FunctionScopeInfo * getEnclosingFunction() const

sema::CapturedRegionScopeInfo * getCurCapturedRegion()

Retrieve the current captured region, if any.

void diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E)

Warn when implicitly casting 0 to nullptr.

void EmitDiagnostic(unsigned DiagID, const DiagnosticBuilder &DB)

Cause the built diagnostic to be emitted on the DiagosticsEngine.

void checkNonTrivialCUnion(QualType QT, SourceLocation Loc, NonTrivialCUnionContext UseContext, unsigned NonTrivialKind)

Emit diagnostics if a non-trivial C union type or a struct that contains a non-trivial C union is use...

IdentifierResolver IdResolver

bool hasAnyUnrecoverableErrorsInThisFunction() const

Determine whether any errors occurred within this function/method/ block.

bool checkStringLiteralArgumentAttr(const AttributeCommonInfo &CI, const Expr *E, StringRef &Str, SourceLocation *ArgLocation=nullptr)

Check if the argument E is a ASCII string literal.

ASTMutationListener * getASTMutationListener() const

Encodes a location in the source.

bool isValid() const

Return true if this is a valid SourceLocation object.

SourceLocation getLocWithOffset(IntTy Offset) const

Return a source location with the specified offset from this SourceLocation.

This class handles loading and caching of source files into memory.

bool isInMainFile(SourceLocation Loc) const

Returns whether the PresumedLoc for a given SourceLocation is in the main file.

bool isInSystemMacro(SourceLocation loc) const

Returns whether Loc is expanded from a macro in a system header.

bool isInSystemHeader(SourceLocation Loc) const

Returns if a SourceLocation is in a system header.

SourceLocation getExpansionLoc(SourceLocation Loc) const

Given a SourceLocation object Loc, return the expansion location referenced by the ID.

A trivial tuple used to represent a source range.

SourceLocation getEnd() const

SourceLocation getBegin() const

void setEnd(SourceLocation e)

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

Run some code with "sufficient" stack space.

SourceRange getSourceRange() const LLVM_READONLY

SourceLocation tokens are not useful in isolation - they are low level value objects created/interpre...

SourceLocation getBeginLoc() const LLVM_READONLY

bool isCompleteDefinition() const

Return true if this decl has its body fully specified.

Exposes information about the current target.

virtual bool hasLongDoubleType() const

Determine whether the long double type is supported on this target.

virtual bool hasBitIntType() const

Determine whether the _BitInt type is supported on this target.

const llvm::Triple & getTriple() const

Returns the target triple of the primary target.

virtual bool hasInt128Type() const

Determine whether the __int128 type is supported on this target.

virtual bool hasFloat16Type() const

Determine whether the _Float16 type is supported on this target.

llvm::StringMap< bool > & getSupportedOpenCLOpts()

Get supported OpenCL extensions and optional core features.

virtual bool hasIbm128Type() const

Determine whether the __ibm128 type is supported on this target.

virtual bool hasFPReturn() const

Determine whether return of a floating point value is supported on this target.

bool hasBuiltinMSVaList() const

Returns whether or not type __builtin_ms_va_list type is available on this target.

virtual bool hasFloat128Type() const

Determine whether the __float128 type is supported on this target.

bool hasAArch64SVETypes() const

Returns whether or not the AArch64 SVE built-in types are available on this target.

virtual bool hasBFloat16Type() const

Determine whether the _BFloat16 type is supported on this target.

virtual bool hasFeature(StringRef Feature) const

Determine whether the given target has the given feature.

bool hasRISCVVTypes() const

Returns whether or not the RISC-V V built-in types are available on this target.

A container of type source information.

CXXRecordDecl * getAsCXXRecordDecl() const

Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or beca...

bool isFloat16Type() const

bool isIntegerType() const

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

bool isSVESizelessBuiltinType() const

Returns true for SVE scalable vector types.

bool isFloat128Type() const

QualType getPointeeType() const

If this is a pointer, ObjC object pointer, or block pointer, this returns the respective pointee.

bool isBitIntType() const

bool isDependentType() const

Whether this type is a dependent type, meaning that its definition somehow depends on a template para...

ScalarTypeKind getScalarTypeKind() const

Given that this is a scalar type, classify it.

bool isIbm128Type() const

bool isBFloat16Type() const

bool isStructureOrClassType() const

bool isRealFloatingType() const

Floating point categories.

bool isRVVSizelessBuiltinType() const

Returns true for RVV scalable vector types.

Linkage getLinkage() const

Determine the linkage of this type.

const T * getAs() const

Member-template getAs<specific type>'.

bool isNullPtrType() const

std::optional< NullabilityKind > getNullability() const

Determine the nullability of the given type.

Base class for declarations which introduce a typedef-name.

Simple class containing the result of Sema::CorrectTypo.

A set of unresolved declarations.

void addDecl(NamedDecl *D)

The iterator over UnresolvedSets.

A set of unresolved declarations.

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.

VarTemplateDecl * getDescribedVarTemplate() const

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

VarDecl * getDefinition(ASTContext &)

Get the real (not just tentative) definition for this declaration.

bool isFileVarDecl() const

Returns true for file scoped variable declaration.

const Expr * getInit() const

VarDecl * getActingDefinition()

Get the tentative definition that acts as the real definition in a TU.

@ DeclarationOnly

This declaration is only a declaration.

bool isEscapingByref() const

Indicates the capture is a __block variable that is captured by a block that can potentially escape (...

Declaration of a variable template.

void IssueWarnings(Policy P, FunctionScopeInfo *fscope, const Decl *D, QualType BlockType)

Retains information about a block that is currently being parsed.

Retains information about a captured region.

Contains information about the compound statement currently being parsed.

Retains information about a function, method, or block that is currently being parsed.

SmallVector< CompoundScopeInfo, 4 > CompoundScopes

The stack of currently active compound statement scopes in the function.

llvm::SmallPtrSet< const BlockDecl *, 1 > Blocks

The set of blocks that are introduced in this function.

llvm::TinyPtrVector< VarDecl * > ByrefBlockVars

The set of __block variables that are introduced in this function.

void FileChanged(SourceLocation Loc, FileChangeReason Reason, SrcMgr::CharacteristicKind FileType, FileID PrevFID) override

Callback invoked whenever a source file is entered or exited.

Defines the clang::TargetInfo interface.

bool evaluateRequiredTargetFeatures(llvm::StringRef RequiredFatures, const llvm::StringMap< bool > &TargetFetureMap)

Returns true if the required target features of a builtin function are enabled.

CharacteristicKind

Indicates whether a file or directory holds normal user code, system code, or system code which is im...

void threadSafetyCleanup(BeforeSet *Cache)

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

@ ExpectedVariableOrFunction

@ Nullable

Values of this type can be null.

@ NonNull

Values of this type can never be null.

Expected< std::optional< DarwinSDKInfo > > parseDarwinSDKInfo(llvm::vfs::FileSystem &VFS, StringRef SDKRootPath)

Parse the SDK information from the SDKSettings.json file.

@ Self

'self' clause, allowed on Compute and Combined Constructs, plus 'update'.

CapturedRegionKind

The different kinds of captured statement.

@ Result

The result type of a method or function.

@ Class

The "class" keyword.

LangAS

Defines the address space values used by the address space qualifier of QualType.

CastKind

CastKind - The kind of operation required for a conversion.

TranslationUnitKind

Describes the kind of translation unit being processed.

@ TU_ClangModule

The translation unit is a clang module.

@ TU_Prefix

The translation unit is a prefix to a translation unit, and is not complete.

ComparisonCategoryType

An enumeration representing the different comparison categories types.

void FormatASTNodeDiagnosticArgument(DiagnosticsEngine::ArgumentKind Kind, intptr_t Val, StringRef Modifier, StringRef Argument, ArrayRef< DiagnosticsEngine::ArgumentValue > PrevArgs, SmallVectorImpl< char > &Output, void *Cookie, ArrayRef< intptr_t > QualTypeVals)

DiagnosticsEngine argument formatting function for diagnostics that involve AST nodes.

ExprValueKind

The categorization of expression values, currently following the C++11 scheme.

@ VK_PRValue

A pr-value expression (in the C++11 taxonomy) produces a temporary value.

@ VK_XValue

An x-value expression is a reference to an object with independent storage but which can be "moved",...

@ VK_LValue

An l-value expression is a reference to an object with independent storage.

const FunctionProtoType * T

bool isExternalFormalLinkage(Linkage L)

std::pair< SourceLocation, PartialDiagnostic > PartialDiagnosticAt

A partial diagnostic along with the source location where this diagnostic occurs.

@ Class

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

bool IsArmStreamingFunction(const FunctionDecl *FD, bool IncludeLocallyStreaming)

Returns whether the given FunctionDecl has an __arm[_locally]_streaming attribute.

bool isExternallyVisible(Linkage L)

CheckedConversionKind

The kind of conversion being performed.

Represents an explicit template argument list in C++, e.g., the "<int>" in "sort<int>".

bool HasFormOfMemberPointer

OverloadExpr * Expression

Describes how types, statements, expressions, and declarations should be printed.

unsigned Bool

Whether we can use 'bool' rather than '_Bool' (even if the language doesn't actually have 'bool',...

unsigned EntireContentsOfLargeArray

Whether to print the entire array initializers, especially on non-type template parameters,...

@ RewritingOperatorAsSpaceship

We are rewriting a comparison operator in terms of an operator<=>.


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