41 #include "llvm/ADT/DenseMap.h" 42 #include "llvm/ADT/SmallSet.h" 43 using namespace clang;
60 Policy.
Bool = BoolMacro->isObjectLike() &&
61 BoolMacro->getNumTokens() == 1 &&
62 BoolMacro->getReplacementToken(0).is(tok::kw__Bool);
82 void set(
Sema &S) { this->S = &S; }
96 IncludeStack.push_back(IncludeLoc);
103 if (!IncludeStack.empty())
106 IncludeStack.pop_back_val());
119 : ExternalSource(nullptr), isMultiplexExternalSource(
false),
120 FPFeatures(pp.getLangOpts()), LangOpts(pp.getLangOpts()), PP(pp),
121 Context(ctxt), Consumer(consumer), Diags(PP.getDiagnostics()),
122 SourceMgr(PP.getSourceManager()), CollectStats(
false),
123 CodeCompleter(CodeCompleter), CurContext(nullptr),
124 OriginalLexicalContext(nullptr), MSStructPragmaOn(
false),
125 MSPointerToMemberRepresentationMethod(
126 LangOpts.getMSPointerToMemberRepresentationMethod()),
127 VtorDispStack(MSVtorDispAttr::Mode(LangOpts.VtorDispMode)), PackStack(0),
128 DataSegStack(nullptr), BSSSegStack(nullptr), ConstSegStack(nullptr),
129 CodeSegStack(nullptr), CurInitSeg(nullptr), VisContext(nullptr),
130 PragmaAttributeCurrentTargetDecl(nullptr),
141 FullyCheckedComparisonCategories(
148 CurScope(
nullptr), Ident_super(
nullptr), Ident___float128(
nullptr) {
151 LoadedExternalKnownNamespaces =
false;
171 InitDataSharingAttributesStack();
173 std::unique_ptr<sema::SemaPPCallbacks> Callbacks =
174 llvm::make_unique<sema::SemaPPCallbacks>();
175 SemaPPCallbackHandler = Callbacks.get();
177 SemaPPCallbackHandler->set(*
this);
188 SC->InitializeSema(*
this);
193 ExternalSema->InitializeSema(*
this);
302 std::vector<QualType> Atomic64BitTypes;
303 Atomic64BitTypes.push_back(AtomicLongT);
304 Atomic64BitTypes.push_back(AtomicULongT);
305 Atomic64BitTypes.push_back(AtomicDoubleT);
307 Atomic64BitTypes.push_back(AtomicSizeT);
308 Atomic64BitTypes.push_back(AtomicIntPtrT);
309 Atomic64BitTypes.push_back(AtomicUIntPtrT);
310 Atomic64BitTypes.push_back(AtomicPtrDiffT);
312 for (
auto &I : Atomic64BitTypes)
314 "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics");
321 #define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \ 322 setOpenCLExtensionForType(Context.Id, Ext); 323 #include "clang/Basic/OpenCLImageTypes.def" 324 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \ 325 addImplicitTypedef(#ExtType, Context.Id##Ty); \ 326 setOpenCLExtensionForType(Context.Id##Ty, #Ext); 327 #include "clang/Basic/OpenCLExtensionTypes.def" 356 ExternalSema->ForgetSema();
359 if (isMultiplexExternalSource)
360 delete ExternalSource;
365 DestroyDataSharingAttributesStack();
369 SemaPPCallbackHandler->
reset();
371 assert(DelayedTypos.empty() &&
"Uncorrected typos!");
379 UnavailableAttr::ImplicitReason reason) {
382 if (!fn)
return false;
393 if (fn->
hasAttr<UnavailableAttr>())
return true;
395 fn->
addAttr(UnavailableAttr::CreateImplicit(
Context,
"", reason, loc));
409 assert(E &&
"Cannot use with NULL ptr");
411 if (!ExternalSource) {
416 if (isMultiplexExternalSource)
420 isMultiplexExternalSource =
true;
426 llvm::errs() <<
"\n*** Semantic Analysis Stats:\n";
444 Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;
455 if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)
483 llvm_unreachable(
"can't implicitly cast lvalue to rvalue with this cast " 485 case CK_LValueToRValue:
486 case CK_ArrayToPointerDecay:
487 case CK_FunctionToPointerDecay:
489 case CK_NonAtomicToAtomic:
502 if (ExprTy == TypeTy)
514 E = Materialized.
get();
518 if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {
519 ImpCast->setType(Ty);
520 ImpCast->setValueKind(VK);
543 llvm_unreachable(
"unknown scalar type kind");
554 if (
const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
558 for (
const auto *Spec : Template->specializations())
565 if (FD->hasBody(DeclToCheck))
571 if (DeclToCheck != FD)
575 if (
const VarDecl *VD = dyn_cast<VarDecl>(D)) {
581 if (VD->isReferenced() &&
582 VD->isUsableInConstantExpressions(SemaRef->
Context))
588 for (
const auto *Spec : Template->specializations())
601 if (DeclToCheck != VD)
609 if (
auto *FD = dyn_cast<FunctionDecl>(ND))
610 return FD->isExternC();
636 if (ND->
hasAttr<WeakRefAttr>())
continue;
638 if (isa<CXXDeductionGuideDecl>(ND))
641 if (ND->
hasAttr<DLLImportAttr>() || ND->
hasAttr<DLLExportAttr>()) {
651 if (FD->isExternallyVisible() &&
653 !FD->getMostRecentDecl()->isInlined() &&
654 !FD->hasAttr<ExcludeFromExplicitInstantiationAttr>())
656 if (FD->getBuiltinID())
659 auto *VD = cast<VarDecl>(ND);
662 if (VD->isExternallyVisible() &&
664 !VD->getMostRecentDecl()->isInline() &&
665 !VD->hasAttr<ExcludeFromExplicitInstantiationAttr>())
670 if (VD->isKnownToBeDefined())
674 Undefined.push_back(std::make_pair(ND, UndefinedUse.second));
686 if (Undefined.empty())
return;
688 for (
auto Undef : Undefined) {
689 ValueDecl *VD = cast<ValueDecl>(Undef.first);
703 ? diag::ext_undefined_internal_type
704 : diag::err_undefined_internal_type)
705 << isa<VarDecl>(VD) << VD;
711 << isa<VarDecl>(VD) << VD;
712 }
else if (
auto *FD = dyn_cast<FunctionDecl>(VD)) {
714 assert(FD->getMostRecentDecl()->isInlined() &&
715 "used object requires definition but isn't inline or internal?");
719 assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() &&
720 "used var requires definition but isn't inline or internal?");
723 if (UseLoc.isValid())
724 S.
Diag(UseLoc, diag::note_used_here);
736 for (
auto &WeakID : WeakIDs)
750 RecordCompleteMap::iterator
Cache = MNCComplete.find(RD);
751 if (Cache != MNCComplete.end())
752 return Cache->second;
755 bool Complete =
true;
758 I != E && Complete; ++I) {
760 Complete = M->isDefined() || M->isDefaulted() ||
761 (M->isPure() && !isa<CXXDestructorDecl>(M));
767 Complete = !F->getTemplatedDecl()->isLateTemplateParsed() &&
768 F->getTemplatedDecl()->isDefined();
769 else if (
const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) {
770 if (R->isInjectedClassName())
772 if (R->hasDefinition())
779 MNCComplete[RD] = Complete;
793 RecordCompleteMap::iterator
Cache = RecordsComplete.find(RD);
794 if (Cache != RecordsComplete.end())
795 return Cache->second;
799 I != E && Complete; ++I) {
803 if (
CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl())
810 dyn_cast<FunctionDecl>((*I)->getFriendDecl()))
811 Complete = FD->isDefined();
817 RecordsComplete[RD] = Complete;
826 if (TD->isReferenced())
828 Diag(TD->getLocation(), diag::warn_unused_local_typedef)
829 << isa<TypeAliasDecl>(TD) << TD->getDeclName();
831 UnusedLocalTypedefNameCandidates.clear();
848 assert(GlobalModule &&
"module creation should not fail");
851 ModuleScopes.push_back({});
852 ModuleScopes.back().Module = GlobalModule;
853 VisibleModules.
setVisible(GlobalModule, StartOfTU);
858 TU->setLocalOwningModule(GlobalModule);
867 &&
"reached end of translation unit with a pool attached?");
907 if (ExternalSource) {
911 for (
auto PII : Pending)
912 if (
auto Func = dyn_cast<FunctionDecl>(PII.first))
913 Func->setInstantiationIsPending(
true);
915 Pending.begin(), Pending.end());
921 "end of TU template instantiation should not create more " 922 "late-parsed templates");
961 if (WeakID.second.getUsed())
966 if (PrevDecl !=
nullptr &&
967 !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))
968 Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type)
971 Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared)
990 (ModuleScopes.empty() ||
995 diag::err_module_declaration_missing);
1004 Stack.push_back(CurrentModule);
1005 while (!Stack.empty()) {
1006 Module *Mod = Stack.pop_back_val();
1037 llvm::SmallSet<VarDecl *, 32> Seen;
1038 for (TentativeDefinitionsType::iterator
1059 diag::err_tentative_def_incomplete_type))
1076 for (UnusedFileScopedDeclsType::iterator
1082 if (
const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
1084 if (!FD->hasBody(DiagD))
1089 if (isa<CXXMethodDecl>(DiagD))
1093 if (FD->getStorageClass() ==
SC_Static &&
1094 !FD->isInlineSpecified() &&
1098 diag::warn_unneeded_static_internal_decl)
1105 if (FD->getDescribedFunctionTemplate())
1110 isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function
1111 : diag::warn_unused_function)
1117 DiagD = cast<VarDecl>(*I);
1161 for (
const auto &DeletedFieldInfo :
DeleteExprs) {
1163 AnalyzeDeleteExprMismatch(DeletedFieldInfo.first,
DeleteExprLoc.first,
1173 "Didn't unmark var as having its initializer parsed");
1188 if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC)) {
1190 }
else if (isa<CXXMethodDecl>(DC) &&
1191 cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call &&
1192 cast<CXXRecordDecl>(DC->
getParent())->isLambda()) {
1211 while (isa<RecordDecl>(DC))
1218 if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
1219 return cast<NamedDecl>(DC);
1245 if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1247 (*Info)->addSFINAEDiagnostic(DiagInfo.
getLocation(),
1270 if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1272 (*Info)->addSFINAEDiagnostic(DiagInfo.
getLocation(),
1281 Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);
1294 (*Info)->addSuppressedDiagnostic(DiagInfo.
getLocation(),
1389 pushOpenMPFunctionRegion();
1394 BlockScope, Block));
1405 LSI->AutoTemplateParameterDepth =
Depth;
1409 "Remove assertion if intentionally called in a non-lambda context.");
1446 VarDecl *VD = BC.getVariable();
1447 if (VD->
hasAttr<BlocksAttr>())
1478 popOpenMPFunctionRegion(Scope);
1484 for (
const auto &PUD : Scope->PossiblyUnreachableDiags)
1485 Diag(PUD.Loc, PUD.PD);
1498 assert(!CurFunction->
CompoundScopes.empty() &&
"mismatched push/pop");
1529 if (CurBSI && CurBSI->TheDecl &&
1556 if (IgnoreNonLambdaCapturingScope) {
1558 while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I))
1564 if (CurLSI && CurLSI->Lambda &&
1577 return (LSI->AutoTemplateParams.size() ||
1578 LSI->GLTemplateParameterList) ? LSI :
nullptr;
1585 if (!
LangOpts.RetainCommentsFromSystemHeaders &&
1592 StringRef MagicMarkerText;
1595 MagicMarkerText =
"///<";
1598 MagicMarkerText =
"/**<";
1601 llvm_unreachable(
"if this is an almost Doxygen comment, " 1602 "it should be ordinary");
1604 Diag(Comment.
getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) <<
1621 llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {}
1640 OverloadSet.
clear();
1643 bool IsMemExpr =
false;
1657 bool Ambiguous =
false;
1662 DeclsEnd = Overloads->
decls_end(); it != DeclsEnd; ++it) {
1670 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) {
1671 if (OverloadDecl->getMinRequiredArguments() == 0) {
1672 if (!ZeroArgCallReturnTy.
isNull() && !Ambiguous &&
1673 (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() ||
1674 OverloadDecl->isCPUSpecificMultiVersion()))) {
1678 ZeroArgCallReturnTy = OverloadDecl->getReturnType();
1679 IsMV = OverloadDecl->isCPUDispatchMultiVersion() ||
1680 OverloadDecl->isCPUSpecificMultiVersion();
1688 return !ZeroArgCallReturnTy.
isNull();
1701 ZeroArgCallReturnTy = R.
get()->getType();
1708 if (
const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
1709 if (Fun->getMinRequiredArguments() == 0)
1710 ZeroArgCallReturnTy = Fun->getReturnType();
1726 dyn_cast_or_null<FunctionProtoType>(FunTy)) {
1727 if (FPT->getNumParams() == 0)
1748 int ShownOverloads = 0;
1749 int SuppressedOverloads = 0;
1751 DeclsEnd = Overloads.
end(); It != DeclsEnd; ++It) {
1755 ++SuppressedOverloads;
1762 if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() &&
1763 !FD->getAttr<TargetAttr>()->isDefaultVersion())
1770 if (SuppressedOverloads)
1771 S.
Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
1772 << SuppressedOverloads;
1777 bool (*IsPlausibleResult)(
QualType)) {
1778 if (!IsPlausibleResult)
1783 DeclsEnd = Overloads.
end(); It != DeclsEnd; ++It) {
1784 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It);
1786 if (IsPlausibleResult(OverloadResultTy))
1787 PlausibleOverloads.
addDecl(It.getDecl());
1798 return (!isa<CStyleCastExpr>(E) &&
1799 !isa<UnaryOperator>(E) &&
1800 !isa<BinaryOperator>(E) &&
1801 !isa<CXXOperatorCallExpr>(E));
1805 if (
const auto *UO = dyn_cast<UnaryOperator>(E))
1806 E = UO->getSubExpr();
1808 if (
const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
1809 if (ULE->getNumDecls() == 0)
1812 const NamedDecl *ND = *ULE->decls_begin();
1813 if (
const auto *FD = dyn_cast<FunctionDecl>(ND))
1814 return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion();
1821 bool (*IsPlausibleResult)(
QualType)) {
1828 !ZeroArgCallTy.
isNull() &&
1829 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
1836 Diag(Loc, PD) << 1 << IsMV << Range
1850 if (!ForceComplain)
return false;
1853 Diag(Loc, PD) << 0 << IsMV << Range;
1867 if (!Ident___float128)
1869 return Ident___float128;
1888 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> &
1897 ExtStr.split(Exts,
" ", -1,
false);
1899 for (
auto &I : Exts)
1900 OpenCLTypeExtMap[CanT].insert(I.str());
1905 ExtStr.split(Exts,
" ", -1,
false);
1908 for (
auto &I : Exts)
1909 OpenCLDeclExtMap[FD].insert(I.str());
1913 if (CurrOpenCLExtension.empty())
1919 if (CurrOpenCLExtension.empty())
1925 if (!OpenCLDeclExtMap.empty())
1932 if (!OpenCLTypeExtMap.empty())
1938 template <
typename T,
typename MapT>
1940 std::string ExtensionNames =
"";
1941 auto Loc = Map.find(FDT);
1943 for (
auto const& I : Loc->second) {
1944 ExtensionNames += I;
1945 ExtensionNames +=
" ";
1947 ExtensionNames.pop_back();
1949 return ExtensionNames;
1953 auto Loc = OpenCLDeclExtMap.find(FD);
1954 if (Loc == OpenCLDeclExtMap.end())
1956 for (
auto &I : Loc->second) {
1963 template <
typename T,
typename DiagLocT,
typename DiagInfoT,
typename MapT>
1964 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc,
1965 DiagInfoT DiagInfo, MapT &Map,
1968 auto Loc = Map.find(D);
1969 if (Loc == Map.end())
1971 bool Disabled =
false;
1972 for (
auto &I : Loc->second) {
1974 Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo
1985 if (
auto TypedefT = dyn_cast<TypedefType>(QT.
getTypePtr()))
1986 Decl = TypedefT->getDecl();
1988 Decl = TagT->getDecl();
1995 return checkOpenCLDisabledTypeOrDecl(TypePtr, Loc, QT, OpenCLTypeExtMap);
1998 if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap))
2003 QT, OpenCLTypeExtMap);
2008 return checkOpenCLDisabledTypeOrDecl(&D, E.
getBeginLoc(), FnName,
RecordDecl * buildImplicitRecord(StringRef Name, RecordDecl::TagKind TK=TTK_Struct) const
Create a new implicit TU-level CXXRecordDecl or RecordDecl declaration.
VarTemplateDecl * getDescribedVarTemplate() const
Retrieves the variable template that is described by this variable declaration.
SourceLocation getLocForStartOfFile(FileID FID) const
Return the source location corresponding to the first byte of the specified file. ...
const IncompleteArrayType * getAsIncompleteArrayType(QualType T) const
Defines the clang::ASTContext interface.
ObjCInterfaceDecl * NSStringDecl
The declaration of the Objective-C NSString class.
CanThrowResult canThrow(const Expr *E)
UnusedFileScopedDeclsType UnusedFileScopedDecls
The set of file scoped decls seen so far that have not been used and must warn if not used...
Represents a function declaration or definition.
llvm::SmallSetVector< const TypedefNameDecl *, 4 > UnusedLocalTypedefNameCandidates
Set containing all typedefs that are likely unused.
bool hasErrorOccurred() const
bool hasBuiltinMSVaList() const
Returns whether or not type __builtin_ms_va_list type is available on this target.
SourceLocation getLocWithOffset(int Offset) const
Return a source location with the specified offset from this SourceLocation.
Smart pointer class that efficiently represents Objective-C method names.
A class which contains all the information about a particular captured value.
if(T->getSizeExpr()) TRY_TO(TraverseStmt(T -> getSizeExpr()))
TypedefDecl * getCFConstantStringDecl() const
A (possibly-)qualified type.
LateTemplateParserCB * LateTemplateParser
void Initialize()
Perform initialization that occurs after the parser has been initialized but before it parses anythin...
IdentifierInfo * getIdentifierInfo(StringRef Name) const
Return information about the specified preprocessor identifier token.
ASTConsumer - This is an abstract interface that should be implemented by clients that read ASTs...
DeclContext * getFunctionLevelDeclContext()
RecordDecl * MSVCGuidDecl
The MSVC "_GUID" struct, which is defined in MSVC header files.
const FunctionProtoType * ResolveExceptionSpec(SourceLocation Loc, const FunctionProtoType *FPT)
Ordinary name lookup, which finds ordinary names (functions, variables, typedefs, etc...
A class which encapsulates the logic for delaying diagnostics during parsing and other processing...
void CheckCompleteVariableDeclaration(VarDecl *VD)
void getUndefinedButUsed(SmallVectorImpl< std::pair< NamedDecl *, SourceLocation > > &Undefined)
Obtain a sorted list of functions that are undefined but ODR-used.
submodule_iterator submodule_begin()
QualType getPointerDiffType() const
Return the unique type for "ptrdiff_t" (C99 7.17) defined in <stddef.h>.
FunctionType - C99 6.7.5.3 - Function Declarators.
CXXFieldCollector - Used to keep track of CXXFieldDecls during parsing of C++ classes.
QualType getPointeeType() const
If this is a pointer, ObjC object pointer, or block pointer, this returns the respective pointee...
QualType ReturnType
ReturnType - The target type of return statements in this context, or null if unknown.
static void notePlausibleOverloads(Sema &S, SourceLocation Loc, const UnresolvedSetImpl &Overloads, bool(*IsPlausibleResult)(QualType))
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...
virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason, SrcMgr::CharacteristicKind FileType, FileID PrevFID) override
Callback invoked whenever a source file is entered or exited.
SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID)
Emit a diagnostic.
Decl - This represents one declaration (or definition), e.g.
Module * getCurrentModule()
Retrieves the module that we're currently building, if any.
ExprResult BuildCallToMemberFunction(Scope *S, Expr *MemExpr, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc)
BuildCallToMemberFunction - Build a call to a member function.
bool isExtVectorType() const
VarDecl * getDefinition(ASTContext &)
Get the real (not just tentative) definition for this declaration.
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.
Scope * TUScope
Translation Unit Scope - useful to Objective-C actions that need to lookup file scope declarations in...
The translation unit is a prefix to a translation unit, and is not complete.
SmallVector< CodeSynthesisContext, 16 > CodeSynthesisContexts
List of active code synthesis contexts.
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.
Declaration of a variable template.
static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E)
SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset=0)
Calls Lexer::getLocForEndOfToken()
const TargetInfo & getTargetInfo() const
A container of type source information.
Linkage getLinkage() const
Determine the linkage of this type.
bool getSuppressSystemWarnings() const
IdentifierInfo * getSuperIdentifier() const
The diagnostic should not be reported, but it should cause template argument deduction to fail...
void LoadExternalWeakUndeclaredIdentifiers()
Load weak undeclared identifiers from the external source.
QualType getAtomicType(QualType T) const
Return the uniqued reference to the atomic type for the specified type.
unsigned NonInstantiationEntries
The number of CodeSynthesisContexts that are not template instantiations and, therefore, should not be counted as part of the instantiation depth.
bool resolveUses(Module *Mod, bool Complain)
Resolve all of the unresolved uses in the given module.
bool isCompleteDefinition() const
Return true if this decl has its body fully specified.
IdentifierInfo * getFloat128Identifier() const
bool DisableTypoCorrection
Tracks whether we are in a context where typo correction is disabled.
Retains information about a function, method, or block that is currently being parsed.
std::string getOpenCLExtensionsFromTypeExtMap(FunctionType *FT)
Check if a function type FT associates with any extensions present in OpenCLTypeExtMap and if so retu...
RAII object that enters a new expression evaluation context.
Compiling a C++ modules TS module interface unit.
Represents a variable declaration or definition.
QualType getReturnType() const
DiagnosticsEngine & Diags
virtual void ReadWeakUndeclaredIdentifiers(SmallVectorImpl< std::pair< IdentifierInfo *, WeakInfo > > &WI)
Read the set of weak, undeclared identifiers known to the external Sema source.
const T * getAs() const
Member-template getAs<specific type>'.
PrintingPolicy getPrintingPolicy() const
Retrieve a suitable printing policy for diagnostics.
void enableSupportedCore(LangOptions LO)
ObjCMethodDecl - Represents an instance or class method declaration.
NamedDecl * getUnderlyingDecl()
Looks through UsingDecls and ObjCCompatibleAliasDecls for the underlying named decl.
SmallVector< CXXRecordDecl *, 4 > DelayedDllExportClasses
llvm::MapVector< NamedDecl *, SourceLocation > UndefinedButUsed
UndefinedInternals - all the used, undefined objects which require a definition in this translation u...
Expr * IgnoreImplicit() LLVM_READONLY
IgnoreImplicit - Skip past any implicit AST nodes which might surround this expression.
CharacteristicKind
Indicates whether a file or directory holds normal user code, system code, or system code which is im...
unsigned getDiagID() const
bool isInvalidDecl() const
Describes how types, statements, expressions, and declarations should be printed. ...
ObjCMethodDecl * ValueWithBytesObjCTypeMethod
The declaration of the valueWithBytes:objCType: method.
This interface provides a way to observe the actions of the preprocessor as it does its thing...
OpenCLOptions & getOpenCLOptions()
Defines the clang::Expr interface and subclasses for C++ expressions.
ObjCInterfaceDecl * NSDictionaryDecl
The declaration of the Objective-C NSDictionary class.
const llvm::MapVector< FieldDecl *, DeleteLocs > & getMismatchingDeleteExpressions() const
Retrieves list of suspicious delete-expressions that will be checked at the end of translation unit...
iterator begin(Source *source, bool LocalOnly=false)
iterator begin(DeclarationName Name)
begin - Returns an iterator for decls with the name 'Name'.
ExprResult ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig=nullptr, bool IsExecConfig=false)
ActOnCallExpr - Handle a call to Fn with the specified array of arguments.
void threadSafetyCleanup(BeforeSet *Cache)
void CheckDelayedMemberExceptionSpecs()
IdentifierInfo * getIdentifier() const
Get the identifier that names this declaration, if there is one.
Represents a struct/union/class.
void FreeVisContext()
FreeVisContext - Deallocate and null out VisContext.
An iterator over the friend declarations of a class.
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
TypedefDecl * getObjCIdDecl() const
Retrieve the typedef corresponding to the predefined id type in Objective-C.
One of these records is kept for each identifier that is lexed.
std::unique_ptr< NSAPI > NSAPIObj
Caches identifiers/selectors for NSFoundation APIs.
LocalInstantiationScope * CurrentInstantiationScope
The current instantiation scope used to store local variables.
virtual void ReadUnusedLocalTypedefNameCandidates(llvm::SmallSetVector< const TypedefNameDecl *, 4 > &Decls)
Read the set of potentially unused typedefs known to the source.
bool doesNotEscape() const
SmallVector< std::pair< FunctionDecl *, FunctionDecl * >, 2 > DelayedEquivalentExceptionSpecChecks
All the function redeclarations seen during a class definition that had their exception spec checks d...
sema::FunctionScopeInfo * getEnclosingFunction() const
bool resolveConflicts(Module *Mod, bool Complain)
Resolve all of the unresolved conflicts in the given module.
sema::LambdaScopeInfo * getCurGenericLambda()
Retrieve the current generic lambda info, if any.
unsigned getCurrentDiagID() const
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
bool inTemplateInstantiation() const
Determine whether we are currently performing template instantiation.
SourceLocation getTypeSpecTypeLoc() const
sema::BlockScopeInfo * getCurBlock()
Retrieve the current block, if any.
SourceLocation getBeginLoc() const LLVM_READONLY
void setCurrentOpenCLExtensionForType(QualType T)
Set current OpenCL extensions for a type which can only be used when these OpenCL extensions are enab...
Represents a member of a struct/union/class.
void erase(iterator From, iterator To)
The current expression is potentially evaluated at run time, which means that code may be generated t...
ImplicitParamDecl * getContextParam() const
Retrieve the parameter containing captured variables.
threadSafety::BeforeSet * ThreadSafetyDeclCache
ObjCInterfaceDecl * NSValueDecl
The declaration of the Objective-C NSValue class.
void ActOnEndOfTranslationUnit()
ActOnEndOfTranslationUnit - This is called at the very end of the translation unit when EOF is reache...
The iterator over UnresolvedSets.
virtual SourceRange getSourceRange() const LLVM_READONLY
Source range that this declaration covers.
llvm::SmallPtrSet< const BlockDecl *, 1 > Blocks
The set of blocks that are introduced in this function.
void setFunctionHasBranchIntoScope()
Represents a C++ member access expression for which lookup produced a set of overloaded functions...
void setVisible(Module *M, SourceLocation Loc, VisibleCallback Vis=[](Module *) {}, ConflictCallback Cb=[](ArrayRef< Module *>, Module *, StringRef) {})
Make a specific module visible.
void setPrintingPolicy(const clang::PrintingPolicy &Policy)
bool DefineUsedVTables()
Define all of the vtables that have been used in this translation unit and reference any virtual memb...
bool isOpenCLDisabledDecl(Decl *FD)
CanQualType OCLReserveIDTy
const LangOptions & getLangOpts() const
Describes a module or submodule.
llvm::BumpPtrAllocator BumpAlloc
static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc)
Give notes for a set of overloads.
bool AccessCheckingSFINAE
When true, access checking violations are treated as SFINAE failures rather than hard errors...
An r-value expression (a pr-value in the C++11 taxonomy) produces a temporary value.
static InitializedEntity InitializeBlock(SourceLocation BlockVarLoc, QualType Type, bool NRVO)
Values of this type can be null.
iterator end()
end - Returns an iterator that has 'finished'.
DiagnosticErrorTrap ErrorTrap
Used to determine if errors occurred in this function or block.
An abstract interface that should be implemented by clients that read ASTs and then require further s...
unsigned TyposCorrected
The number of typos corrected by CorrectTypo.
VarDecl * getActingDefinition()
Get the tentative definition that acts as the real definition in a TU.
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...
bool findMacroSpelling(SourceLocation &loc, StringRef name)
Looks through the macro-expansion chain for the given location, looking for a macro expansion with th...
Module * createGlobalModuleForInterfaceUnit(SourceLocation Loc)
Create a 'global module' for a C++ Modules TS module interface unit.
ObjCMethodDecl * getCurMethodDecl()
getCurMethodDecl - If inside of a method body, this returns a pointer to the method decl for the meth...
bool isReferenced() const
Whether any declaration of this entity was referenced.
HeaderSearch & getHeaderSearchInfo() const
bool HasFormOfMemberPointer
const SourceLocation & getLocation() const
bool checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType T)
Check if type T corresponding to declaration specifier DS is disabled due to required OpenCL extensio...
TypedefDecl * getObjCSelDecl() const
Retrieve the typedef corresponding to the predefined 'SEL' type in Objective-C.
ExprValueKind getValueKind() const
getValueKind - The value kind that this expression produces.
std::pair< SourceLocation, bool > DeleteExprLoc
Delete-expressions to be analyzed at the end of translation unit.
SourceLocation getExpansionLoc(SourceLocation Loc) const
Given a SourceLocation object Loc, return the expansion location referenced by the ID...
const clang::PrintingPolicy & getPrintingPolicy() const
void PerformPendingInstantiations(bool LocalOnly=false)
Performs template instantiation for all implicit template instantiations we have seen until this poin...
A set of unresolved declarations.
void IssueWarnings(Policy P, FunctionScopeInfo *fscope, const Decl *D, const BlockExpr *blkExpr)
void CheckDelegatingCtorCycles()
CheckedConversionKind
The kind of conversion being performed.
friend_iterator friend_end() const
~ExternalSemaSource() override
Values of this type can never be null.
void addExternalSource(ExternalSemaSource *E)
Registers an external source.
Scope - A scope is a transient data structure that is used while parsing the program.
const Type * getTypePtr() const
Retrieves a pointer to the underlying (unqualified) type.
static const unsigned NumNSNumberLiteralMethods
submodule_iterator submodule_end()
void PrintStats() const
Print out statistics about the semantic analysis.
void emitAndClearUnusedLocalTypedefWarnings()
SourceLocation getCurrentDiagLoc() const
virtual ASTMutationListener * GetASTMutationListener()
If the consumer is interested in entities getting modified after their initial creation, it should return a pointer to an ASTMutationListener here.
ObjCInterfaceDecl * NSNumberDecl
The declaration of the Objective-C NSNumber class.
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...
const LangOptions & getLangOpts() const
bool isTypeDependent() const
isTypeDependent - Determines whether this expression is type-dependent (C++ [temp.dep.expr]), which means that its type could change from one template instantiation to the next.
sema::AnalysisBasedWarnings AnalysisWarnings
Worker object for performing CFG-based warnings.
Represents the body of a CapturedStmt, and serves as its DeclContext.
NamespaceDecl * StdExperimentalNamespaceCache
The C++ "std::experimental" namespace, where the experimental parts of the standard library resides...
ObjCMethodDecl * StringWithUTF8StringMethod
The declaration of the stringWithUTF8String: method.
void DiagnoseNonDefaultPragmaPack(PragmaPackDiagnoseKind Kind, SourceLocation IncludeLoc)
const LangOptions & LangOpts
bool checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E)
Check if declaration D used by expression E is disabled due to required OpenCL extensions being disab...
Contains information about the compound statement currently being parsed.
bool EmitCurrentDiagnostic(bool Force=false)
Emit the current diagnostic and clear the diagnostic state.
DiagnosticsEngine & getDiagnostics() const
static bool IsCallableWithAppend(Expr *E)
Determine whether the given expression can be called by just putting parentheses after it...
bool isExternalFormalLinkage(Linkage L)
Sema - This implements semantic analysis and AST building for C.
CXXRecordDecl * getAsCXXRecordDecl() const
Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or beca...
Represents a prototype with parameter type info, e.g.
TentativeDefinitionsType TentativeDefinitions
All the tentative definitions encountered in the TU.
Retains information about a captured region.
void PushCompoundScope(bool IsStmtExpr)
Represents a ValueDecl that came out of a declarator.
CastKind
CastKind - The kind of operation required for a conversion.
static ImplicitCastExpr * Create(const ASTContext &Context, QualType T, CastKind Kind, Expr *Operand, const CXXCastPath *BasePath, ExprValueKind Cat)
TypedefDecl * getBuiltinMSVaListDecl() const
Retrieve the C type declaration corresponding to the predefined __builtin_ms_va_list type...
virtual void ReadMismatchingDeleteExpressions(llvm::MapVector< FieldDecl *, llvm::SmallVector< std::pair< SourceLocation, bool >, 4 >> &)
void setFunctionHasBranchProtectedScope()
bool isEnabled(llvm::StringRef Ext) const
Scope * getCurScope() const
Retrieve the parser's current scope.
CommentOptions CommentOpts
Options for parsing comments.
SmallVector< PendingImplicitInstantiation, 1 > LateParsedInstantiations
Queue of implicit template instantiations that cannot be performed eagerly.
Retains information about a block that is currently being parsed.
bool isCodeCompletionEnabled() const
Determine if we are performing code completion.
An abstract interface that should be implemented by external AST sources that also provide informatio...
Pepresents a block literal declaration, which is like an unnamed FunctionDecl.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D)
Used to prune the decls of Sema's UnusedFileScopedDecls vector.
This represents one expression.
void setOpenCLExtensionForDecl(Decl *FD, llvm::StringRef Exts)
Set OpenCL extensions for a declaration which can only be used when these OpenCL extensions are enabl...
Show just the "best" overload candidates.
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.
ExprValueKind
The categorization of expression values, currently following the C++11 scheme.
bool isInSystemHeader(SourceLocation Loc) const
Returns if a SourceLocation is in a system header.
llvm::SmallPtrSet< const Decl *, 4 > ParsingInitForAutoVars
ParsingInitForAutoVars - a set of declarations with auto types for which we are currently parsing the...
static FindResult find(Expr *E)
Finds the overloaded expression in the given expression E of OverloadTy.
TypedefDecl * buildImplicitTypedef(QualType T, StringRef Name) const
Create a new implicit TU-level typedef declaration.
void addImplicitTypedef(StringRef Name, QualType T)
const T * castAs() const
Member-template castAs<specific type>.
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
Represents a C++ destructor within a class.
void setInvalidDecl(bool Invalid=true)
setInvalidDecl - Indicates the Decl had a semantic error.
bool InNonInstantiationSFINAEContext
Whether we are in a SFINAE context that is not associated with template instantiation.
Defines the clang::Preprocessor interface.
bool isNullPtrType() const
llvm::MapVector< IdentifierInfo *, WeakInfo > WeakUndeclaredIdentifiers
WeakUndeclaredIdentifiers - Identifiers contained in #pragma weak before declared.
Defines the classes clang::DelayedDiagnostic and clang::AccessedEntity.
Not compiling a module interface at all.
void setBlockVarCopyInit(const VarDecl *VD, Expr *CopyExpr, bool CanThrow)
Set the copy inialization expression of a block var decl.
DeclContext * getDeclContext()
void PopFunctionScopeInfo(const sema::AnalysisBasedWarnings::Policy *WP=nullptr, const Decl *D=nullptr, const BlockExpr *blkExpr=nullptr)
bool resolveExports(Module *Mod, bool Complain)
Resolve all of the unresolved exports in the given module.
An abstract interface that should be implemented by listeners that want to be notified when an AST en...
TypedefDecl * getInt128Decl() const
Retrieve the declaration for the 128-bit signed integer type.
ScalarTypeKind getScalarTypeKind() const
Given that this is a scalar type, classify it.
decls_iterator decls_begin() const
bool RequireCompleteType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser)
Ensure that the type T is a complete type.
const MacroInfo * getMacroInfo(const IdentifierInfo *II) const
void Clear()
Clear out the current diagnostic.
SmallVector< sema::FunctionScopeInfo *, 4 > FunctionScopes
Stack containing information about each of the nested function, block, and method scopes that are cur...
PartialDiagnostic::StorageAllocator & getDiagAllocator()
QualType getConstantArrayType(QualType EltTy, const llvm::APInt &ArySize, ArrayType::ArraySizeModifier ASM, unsigned IndexTypeQuals) const
Return the unique reference to the type for a constant array of the specified element type...
DeclContext * getParent()
getParent - Returns the containing DeclContext.
bool isExternallyVisible(Linkage L)
SourceLocation getEnd() const
Preprocessor & getPreprocessor() const
TypedefDecl * getBuiltinVaListDecl() const
Retrieve the C type declaration corresponding to the predefined __builtin_va_list type...
ObjCMethodDecl * ArrayWithObjectsMethod
The declaration of the arrayWithObjects:count: method.
void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext=true)
Add this decl to the scope shadowed decl chains.
sema::LambdaScopeInfo * PushLambdaScope()
The result type of a method or function.
NamedDecl * LookupSingleName(Scope *S, DeclarationName Name, SourceLocation Loc, LookupNameKind NameKind, RedeclarationKind Redecl=NotForRedeclaration)
Look up a name, looking for a single declaration.
void DiagnoseUnterminatedPragmaPack()
bool isNull() const
Return true if this QualType doesn't point to a type yet.
OverloadsShown getShowOverloads() const
unsigned NumSFINAEErrors
The number of SFINAE diagnostics that have been trapped.
llvm::DenseMap< const CXXRecordDecl *, bool > RecordCompleteMap
An abstract interface that should be implemented by external AST sources that also provide informatio...
bool isConstQualified() const
Determine whether this type is const-qualified.
unsigned Bool
Whether we can use 'bool' rather than '_Bool' (even if the language doesn't actually have 'bool'...
bool isStructureOrClassType() const
void PushBlockScope(Scope *BlockScope, BlockDecl *Block)
This declaration has an owning module, but is globally visible (typically because its owning module i...
void Emit(const DiagnosticBuilder &DB) const
RecordDecl * CXXTypeInfoDecl
The C++ "type_info" declaration, which is defined in <typeinfo>.
A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr...
QualType getCanonicalType() const
ActionResult - This structure is used while parsing/acting on expressions, stmts, etc...
FunctionDecl * getAsFunction() LLVM_READONLY
Returns the function itself, or the templated function if this is a function template.
Encodes a location in the source.
TypedefDecl * getUInt128Decl() const
Retrieve the declaration for the 128-bit unsigned integer type.
QualType getReturnType() const
IdentifierInfo & get(StringRef Name)
Return the identifier token info for the specified named identifier.
void setCurrentOpenCLExtensionForDecl(Decl *FD)
Set current OpenCL extensions for a declaration which can only be used when these OpenCL extensions a...
void setModuleOwnershipKind(ModuleOwnershipKind MOK)
Set whether this declaration is hidden from name lookup.
QualType getUIntPtrType() const
Return a type compatible with "uintptr_t" (C99 7.18.1.4), as defined by the target.
decl_iterator decls_begin() const
bool makeUnavailableInSystemHeader(SourceLocation loc, UnavailableAttr::ImplicitReason reason)
makeUnavailableInSystemHeader - There is an error in the current context.
ObjCInterfaceDecl * getObjCProtocolDecl() const
Retrieve the Objective-C class declaration corresponding to the predefined Protocol class...
std::string getOpenCLExtensionsFromDeclExtMap(FunctionDecl *FD)
Check if a function declaration FD associates with any extensions present in OpenCLDeclExtMap and if ...
bool isExternalWithNoLinkageType(ValueDecl *VD)
Determine if VD, which must be a variable or function, is an external symbol that nonetheless can't b...
ClassTemplateDecl * StdInitializerList
The C++ "std::initializer_list" template, which is defined in <initializer_list>. ...
Represents a static or instance method of a struct/union/class.
void DiagnoseUseOfUnimplementedSelectors()
void addDecl(NamedDecl *D)
bool isInMainFile(SourceLocation Loc) const
Returns whether the PresumedLoc for a given SourceLocation is in the main file.
void SetArgToStringFn(ArgToStringFnTy Fn, void *Cookie)
virtual void ReadUndefinedButUsed(llvm::MapVector< NamedDecl *, SourceLocation > &Undefined)
Load the set of used but not defined functions or variables with internal linkage, or used but not defined internal functions.
void EmitCurrentDiagnostic(unsigned DiagID)
Cause the active diagnostic on the DiagosticsEngine to be emitted.
This declaration is only a declaration.
void addSupport(const OpenCLOptions &Opts)
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
The diagnostic should be suppressed entirely.
static bool IsRecordFullyDefined(const CXXRecordDecl *RD, RecordCompleteMap &RecordsComplete, RecordCompleteMap &MNCComplete)
Returns true, if the given CXXRecordDecl is fully defined in this translation unit, i.e.
friend_iterator friend_begin() const
bool isUsed(bool CheckUsedAttr=true) const
Whether any (re-)declaration of the entity was used, meaning that a definition is required...
std::unique_ptr< CXXFieldCollector > FieldCollector
FieldCollector - Collects CXXFieldDecls during parsing of C++ classes.
static bool isFunctionOrVarDeclExternC(NamedDecl *ND)
sema::CapturedRegionScopeInfo * getCurCapturedRegion()
Retrieve the current captured region, if any.
static bool isBuiltinNote(unsigned DiagID)
Determine whether the given built-in diagnostic ID is a Note.
void ActOnStartOfTranslationUnit()
This is called before the very first declaration in the translation unit is parsed.
ASTConsumer & getASTConsumer() const
void setLastDiagnosticIgnored(bool Ignored=true)
Pretend that the last diagnostic issued was ignored, so any subsequent notes will be suppressed...
void setOpenCLExtensionForType(QualType T, llvm::StringRef Exts)
Set OpenCL extensions for a type which can only be used when these OpenCL extensions are enabled...
decl_iterator - Iterates through the declarations stored within this context.
Base class for declarations which introduce a typedef-name.
Abstract interface for a consumer of code-completion information.
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
Dataflow Directional Tag Classes.
LateTemplateParserCleanupCB * LateTemplateParserCleanup
bool isValid() const
Return true if this is a valid SourceLocation object.
int ArgumentPackSubstitutionIndex
The current index into pack expansion arguments that will be used for substitution of parameter packs...
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
ObjCMethodDecl * NSNumberLiteralMethods[NSAPI::NumNSNumberLiteralMethods]
The Objective-C NSNumber methods used to create NSNumber literals.
static void checkEscapingByref(VarDecl *VD, Sema &S)
ArrayRef< Capture > captures() const
ASTMutationListener * getASTMutationListener() const
ExprResult ImpCastExprToType(Expr *E, QualType Type, CastKind CK, ExprValueKind VK=VK_RValue, const CXXCastPath *BasePath=nullptr, CheckedConversionKind CCK=CCK_ImplicitConversion)
ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.
void diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E)
Warn when implicitly casting 0 to nullptr.
void RecordParsingTemplateParameterDepth(unsigned Depth)
This is used to inform Sema what the current TemplateParameterDepth is during Parsing.
bool ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const
SourceLocation getIncludeLoc(FileID FID) const
Returns the include location if FID is a #include'd file otherwise it returns an invalid location...
This is a scope that corresponds to the template parameters of a C++ template.
ClassTemplateDecl * StdCoroutineTraitsCache
The C++ "std::coroutine_traits" template, which is defined in <coroutine_traits>
FileID getMainFileID() const
Returns the FileID of the main source file.
bool GlobalNewDeleteDeclared
A flag to remember whether the implicit forms of operator new and delete have been declared...
The name of a declaration.
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.
OverloadExpr * Expression
A set of unresolved declarations.
bool hasUnrecoverableErrorOccurred() const
Determine whether any unrecoverable errors have occurred since this object instance was created...
IdentifierResolver IdResolver
Optional< sema::TemplateDeductionInfo * > isSFINAEContext() const
Determines whether we are currently in a context where template argument substitution failures are no...
bool isEscapingByref() const
Indicates the capture is a __block variable that is captured by a block that can potentially escape (...
bool IsHeaderFile
Indicates whether the front-end is explicitly told that the input is a header file (i...
static CastKind ScalarTypeToBooleanCastKind(QualType ScalarTy)
ScalarTypeToBooleanCastKind - Returns the cast kind corresponding to the conversion from scalar type ...
ExternalASTSource * getExternalSource() const
Retrieve a pointer to the external AST source associated with this AST context, if any...
Abstract interface for a module loader.
NamedDecl * getCurFunctionOrMethodDecl()
getCurFunctionOrMethodDecl - Return the Decl for the current ObjC method or C function we're in...
std::string getOpenCLExtensionsFromExtMap(T *FT, MapT &Map)
Find an extension in an appropriate extension map and return its name.
bool hasAnyUnrecoverableErrorsInThisFunction() const
Determine whether any errors occurred within this function/method/ block.
Expr * IgnoreParenImpCasts() LLVM_READONLY
IgnoreParenImpCasts - Ignore parentheses and implicit casts.
llvm::MapVector< FieldDecl *, DeleteLocs > DeleteExprs
void DiagnoseUnterminatedPragmaAttribute()
Encapsulates the data about a macro definition (e.g.
FileID getFileID(SourceLocation SpellingLoc) const
Return the FileID for a SourceLocation.
DeclarationName VAListTagName
VAListTagName - The declaration name corresponding to __va_list_tag.
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.
CanQualType UnsignedLongTy
FunctionDecl * getCurFunctionDecl()
getCurFunctionDecl - If inside of a function body, this returns a pointer to the function decl for th...
static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S)
ExtVectorType - Extended vector type.
MaterializeTemporaryExpr * CreateMaterializeTemporaryExpr(QualType T, Expr *Temporary, bool BoundToLvalueReference)
CanQualType BoundMemberTy
SmallVector< ExpressionEvaluationContextRecord, 8 > ExprEvalContexts
A stack of expression evaluation contexts.
void addComment(const RawComment &RC)
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.
ObjCInterfaceDecl * NSArrayDecl
The declaration of the Objective-C NSArray class.
Implements a partial diagnostic that can be emitted anwyhere in a DiagnosticBuilder stream...
Optional< NullabilityKind > getNullability(const ASTContext &context) const
Determine the nullability of the given type.
virtual bool hasInt128Type() const
Determine whether the __int128 type is supported on this target.
std::unique_ptr< sema::FunctionScopeInfo > PreallocatedFunctionScope
uint64_t getTypeSize(QualType T) const
Return the size of the specified (complete) type T, in bits.
This is a scope that can contain a declaration.
SourceManager & getSourceManager()
void ActOnTranslationUnitScope(Scope *S)
Scope * getScopeForContext(DeclContext *Ctx)
Determines the active Scope associated with the given declaration context.
CanQualType getCanonicalType(QualType T) const
Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate.h) and friends (in DeclFriend.h).
Expr * MaybeCreateExprWithCleanups(Expr *SubExpr)
MaybeCreateExprWithCleanups - If the current full-expression requires any cleanups, surround it with a ExprWithCleanups node.
ExprResult PerformMoveOrCopyInitialization(const InitializedEntity &Entity, const VarDecl *NRVOCandidate, QualType ResultType, Expr *Value, bool AllowNRVO=true)
Perform the initialization of a potentially-movable value, which is the result of return value...
TranslationUnitDecl * getTranslationUnitDecl() const
void setSuppressAllDiagnostics(bool Val=true)
Suppress all diagnostics, to silence the front end when we know that we don't want any more diagnosti...
void * VisContext
VisContext - Manages the stack for #pragma GCC visibility.
Captures information about "declaration specifiers".
sema::DelayedDiagnosticPool * getCurrentPool() const
Returns the current delayed-diagnostics pool.
static SFINAEResponse getDiagnosticSFINAEResponse(unsigned DiagID)
Determines whether the given built-in diagnostic ID is for an error that is suppressed if it occurs d...
Represents a C++ struct/union/class.
void setFunctionHasIndirectGoto()
Represents a C array with an unspecified size.
sema::FunctionScopeInfo * getCurFunction() const
DeclContext * CurContext
CurContext - This is the current declaration context of parsing.
TranslationUnitKind
Describes the kind of translation unit being processed.
static FixItHint CreateReplacement(CharSourceRange RemoveRange, StringRef Code)
Create a code modification hint that replaces the given source range with the given code string...
TypedefDecl * getObjCClassDecl() const
Retrieve the typedef declaration corresponding to the predefined Objective-C 'Class' type...
SourceManager & getSourceManager() const
SourceRange getSourceRange() const LLVM_READONLY
SourceLocation tokens are not useful in isolation - they are low level value objects created/interpre...
bool tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, UnresolvedSetImpl &NonTemplateOverloads)
Figure out if an expression could be turned into a call.
A little helper class (which is basically a smart pointer that forwards info from DiagnosticsEngine) ...
TranslationUnitKind TUKind
The kind of translation unit we are processing.
Defines the clang::TargetInfo interface.
bool isIncrementalProcessingEnabled() const
Returns true if incremental processing is enabled.
The diagnostic should be reported.
void ActOnComment(SourceRange Comment)
virtual void ReadPendingInstantiations(SmallVectorImpl< std::pair< ValueDecl *, SourceLocation > > &Pending)
Read the set of pending instantiations known to the external Sema source.
decl_type * getMostRecentDecl()
Returns the most recent (re)declaration of this declaration.
The diagnostic is an access-control diagnostic, which will be substitution failures in some contexts ...
A reference to a declared variable, function, enum, etc.
QualType getIntPtrType() const
Return a type compatible with "intptr_t" (C99 7.18.1.4), as defined by the target.
bool isIgnored(unsigned DiagID, SourceLocation Loc) const
Determine whether the diagnostic is known to be ignored.
NamedDecl * getMostRecentDecl()
bool isDeleted() const
Whether this function has been deleted.
DeclContext * getPrimaryContext()
getPrimaryContext - There may be many different declarations of the same entity (including forward de...
SourceManager & SourceMgr
CapturedRegionKind
The different kinds of captured statement.
Annotates a diagnostic with some code that should be inserted, removed, or replaced to fix the proble...
bool isInSystemMacro(SourceLocation loc) const
Returns whether Loc is expanded from a macro in a system header.
SmallVector< CompoundScopeInfo, 4 > CompoundScopes
The stack of currently active compound stamement scopes in the function.
An l-value expression is a reference to an object with independent storage.
virtual void CompleteTentativeDefinition(VarDecl *D)
CompleteTentativeDefinition - Callback invoked at the end of a translation unit to notify the consume...
A trivial tuple used to represent a source range.
llvm::TinyPtrVector< VarDecl * > ByrefBlockVars
The set of __block variables that are introduced in this function.
void diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType, SourceLocation Loc)
Warn if we're implicitly casting from a _Nullable pointer type to a _Nonnull one. ...
This represents a decl that may have a name.
void PushCapturedRegionScope(Scope *RegionScope, CapturedDecl *CD, RecordDecl *RD, CapturedRegionKind K)
sema::LambdaScopeInfo * getCurLambda(bool IgnoreNonLambdaCapturingScope=false)
Retrieve the current lambda scope info, if any.
IdentifierInfo * getBoolName() const
Retrieve the identifier 'bool'.
void setType(QualType newType)
SourceLocation getBegin() const
const LangOptions & getLangOpts() const
static void checkUndefinedButUsed(Sema &S)
checkUndefinedButUsed - Check for undefined objects with internal linkage or that are inline...
decls_iterator decls_end() const
SmallVector< std::pair< CXXMethodDecl *, const FunctionProtoType * >, 2 > DelayedDefaultedMemberExceptionSpecs
All the members seen during a class definition which were both explicitly defaulted and had explicitl...
void addPPCallbacks(std::unique_ptr< PPCallbacks > C)
This class handles loading and caching of source files into memory.
OpenCLOptions & getSupportedOpenCLOpts()
Get supported OpenCL extensions and optional core features.
bool getSuppressAllDiagnostics() const
Declaration of a template function.
void PushFunctionScope()
Enter a new function scope.
NamedDeclSetType UnusedPrivateFields
Set containing all declared private fields that are not used.
SourceLocation getLocation() const
bool isExternallyVisible() const
CanQualType OCLClkEventTy
ObjCMethodDecl * DictionaryWithObjectsMethod
The declaration of the dictionaryWithObjects:forKeys:count: method.
Helper class that creates diagnostics with optional template instantiation stacks.
Expr * IgnoreParens() LLVM_READONLY
IgnoreParens - Ignore parentheses.
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
This is a C++ Modules TS module interface unit.
CanQualType UnsignedIntTy
decl_iterator decls_end() const
bool hasExternalFormalLinkage() const
True if this decl has external linkage.
CanQualType getSizeType() const
Return the unique type for "size_t" (C99 7.17), defined in <stddef.h>.
static bool isExternC(const NamedDecl *ND)
The translation unit is a module.