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);
301 std::vector<QualType> Atomic64BitTypes;
302 Atomic64BitTypes.push_back(AtomicLongT);
303 Atomic64BitTypes.push_back(AtomicULongT);
304 Atomic64BitTypes.push_back(AtomicDoubleT);
306 Atomic64BitTypes.push_back(AtomicSizeT);
307 Atomic64BitTypes.push_back(AtomicIntPtrT);
308 Atomic64BitTypes.push_back(AtomicUIntPtrT);
309 Atomic64BitTypes.push_back(AtomicPtrDiffT);
311 for (
auto &I : Atomic64BitTypes)
313 "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics");
320 #define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \ 321 setOpenCLExtensionForType(Context.Id, Ext); 322 #include "clang/Basic/OpenCLImageTypes.def" 351 ExternalSema->ForgetSema();
354 if (isMultiplexExternalSource)
355 delete ExternalSource;
360 DestroyDataSharingAttributesStack();
364 SemaPPCallbackHandler->
reset();
366 assert(DelayedTypos.empty() &&
"Uncorrected typos!");
374 UnavailableAttr::ImplicitReason reason) {
377 if (!fn)
return false;
388 if (fn->
hasAttr<UnavailableAttr>())
return true;
390 fn->
addAttr(UnavailableAttr::CreateImplicit(
Context,
"", reason, loc));
404 assert(E &&
"Cannot use with NULL ptr");
406 if (!ExternalSource) {
411 if (isMultiplexExternalSource)
415 isMultiplexExternalSource =
true;
421 llvm::errs() <<
"\n*** Semantic Analysis Stats:\n";
439 Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;
450 if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)
478 llvm_unreachable(
"can't implicitly cast lvalue to rvalue with this cast " 480 case CK_LValueToRValue:
481 case CK_ArrayToPointerDecay:
482 case CK_FunctionToPointerDecay:
484 case CK_NonAtomicToAtomic:
497 if (ExprTy == TypeTy)
509 E = Materialized.
get();
513 if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {
514 ImpCast->setType(Ty);
515 ImpCast->setValueKind(VK);
537 llvm_unreachable(
"unknown scalar type kind");
548 if (
const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
552 for (
const auto *Spec : Template->specializations())
559 if (FD->hasBody(DeclToCheck))
565 if (DeclToCheck != FD)
569 if (
const VarDecl *VD = dyn_cast<VarDecl>(D)) {
575 if (VD->isReferenced() &&
576 VD->isUsableInConstantExpressions(SemaRef->
Context))
582 for (
const auto *Spec : Template->specializations())
595 if (DeclToCheck != VD)
603 if (
auto *FD = dyn_cast<FunctionDecl>(ND))
604 return FD->isExternC();
630 if (ND->
hasAttr<WeakRefAttr>())
continue;
632 if (isa<CXXDeductionGuideDecl>(ND))
635 if (ND->
hasAttr<DLLImportAttr>() || ND->
hasAttr<DLLExportAttr>()) {
645 if (FD->isExternallyVisible() &&
647 !FD->getMostRecentDecl()->isInlined())
649 if (FD->getBuiltinID())
652 auto *VD = cast<VarDecl>(ND);
655 if (VD->isExternallyVisible() &&
657 !VD->getMostRecentDecl()->isInline())
662 if (VD->isKnownToBeDefined())
666 Undefined.push_back(std::make_pair(ND, UndefinedUse.second));
678 if (Undefined.empty())
return;
680 for (
auto Undef : Undefined) {
681 ValueDecl *VD = cast<ValueDecl>(Undef.first);
695 ? diag::ext_undefined_internal_type
696 : diag::err_undefined_internal_type)
697 << isa<VarDecl>(VD) << VD;
703 << isa<VarDecl>(VD) << VD;
704 }
else if (
auto *FD = dyn_cast<FunctionDecl>(VD)) {
706 assert(FD->getMostRecentDecl()->isInlined() &&
707 "used object requires definition but isn't inline or internal?");
711 assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() &&
712 "used var requires definition but isn't inline or internal?");
715 if (UseLoc.isValid())
716 S.
Diag(UseLoc, diag::note_used_here);
728 for (
auto &WeakID : WeakIDs)
742 RecordCompleteMap::iterator
Cache = MNCComplete.find(RD);
743 if (Cache != MNCComplete.end())
744 return Cache->second;
747 bool Complete =
true;
750 I != E && Complete; ++I) {
752 Complete = M->isDefined() || M->isDefaulted() ||
753 (M->isPure() && !isa<CXXDestructorDecl>(M));
759 Complete = !F->getTemplatedDecl()->isLateTemplateParsed() &&
760 F->getTemplatedDecl()->isDefined();
761 else if (
const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) {
762 if (R->isInjectedClassName())
764 if (R->hasDefinition())
771 MNCComplete[RD] = Complete;
785 RecordCompleteMap::iterator
Cache = RecordsComplete.find(RD);
786 if (Cache != RecordsComplete.end())
787 return Cache->second;
791 I != E && Complete; ++I) {
795 if (
CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl())
802 dyn_cast<FunctionDecl>((*I)->getFriendDecl()))
803 Complete = FD->isDefined();
809 RecordsComplete[RD] = Complete;
818 if (TD->isReferenced())
820 Diag(TD->getLocation(), diag::warn_unused_local_typedef)
821 << isa<TypeAliasDecl>(TD) << TD->getDeclName();
823 UnusedLocalTypedefNameCandidates.clear();
838 assert(GlobalModule &&
"module creation should not fail");
841 ModuleScopes.push_back({});
842 ModuleScopes.back().Module = GlobalModule;
843 VisibleModules.
setVisible(GlobalModule, StartOfTU);
848 TU->setLocalOwningModule(GlobalModule);
857 &&
"reached end of translation unit with a pool attached?");
897 if (ExternalSource) {
901 for (
auto PII : Pending)
902 if (
auto Func = dyn_cast<FunctionDecl>(PII.first))
903 Func->setInstantiationIsPending(
true);
905 Pending.begin(), Pending.end());
911 "end of TU template instantiation should not create more " 912 "late-parsed templates");
952 if (WeakID.second.getUsed())
957 if (PrevDecl !=
nullptr &&
958 !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))
959 Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type)
962 Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared)
985 diag::err_module_declaration_missing);
994 Stack.push_back(CurrentModule);
995 while (!Stack.empty()) {
996 Module *Mod = Stack.pop_back_val();
1027 llvm::SmallSet<VarDecl *, 32> Seen;
1028 for (TentativeDefinitionsType::iterator
1049 diag::err_tentative_def_incomplete_type))
1066 for (UnusedFileScopedDeclsType::iterator
1072 if (
const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
1074 if (!FD->hasBody(DiagD))
1079 if (isa<CXXMethodDecl>(DiagD))
1083 if (FD->getStorageClass() ==
SC_Static &&
1084 !FD->isInlineSpecified() &&
1088 diag::warn_unneeded_static_internal_decl)
1095 if (FD->getDescribedFunctionTemplate())
1100 isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function
1101 : diag::warn_unused_function)
1107 DiagD = cast<VarDecl>(*I);
1151 for (
const auto &DeletedFieldInfo :
DeleteExprs) {
1153 AnalyzeDeleteExprMismatch(DeletedFieldInfo.first,
DeleteExprLoc.first,
1163 "Didn't unmark var as having its initializer parsed");
1178 if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC)) {
1180 }
else if (isa<CXXMethodDecl>(DC) &&
1181 cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call &&
1182 cast<CXXRecordDecl>(DC->
getParent())->isLambda()) {
1201 while (isa<RecordDecl>(DC))
1208 if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
1209 return cast<NamedDecl>(DC);
1235 if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1237 (*Info)->addSFINAEDiagnostic(DiagInfo.
getLocation(),
1260 if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1262 (*Info)->addSFINAEDiagnostic(DiagInfo.
getLocation(),
1271 Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);
1284 (*Info)->addSuppressedDiagnostic(DiagInfo.
getLocation(),
1379 pushOpenMPFunctionRegion();
1384 BlockScope, Block));
1395 LSI->AutoTemplateParameterDepth =
Depth;
1399 "Remove assertion if intentionally called in a non-lambda context.");
1408 popOpenMPFunctionRegion(Scope);
1414 for (
const auto &PUD : Scope->PossiblyUnreachableDiags)
1415 Diag(PUD.Loc, PUD.PD);
1428 assert(!CurFunction->
CompoundScopes.empty() &&
"mismatched push/pop");
1459 if (CurBSI && CurBSI->TheDecl &&
1486 if (IgnoreNonLambdaCapturingScope) {
1488 while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I))
1494 if (CurLSI && CurLSI->Lambda &&
1507 return (LSI->AutoTemplateParams.size() ||
1508 LSI->GLTemplateParameterList) ? LSI :
nullptr;
1515 if (!
LangOpts.RetainCommentsFromSystemHeaders &&
1522 StringRef MagicMarkerText;
1525 MagicMarkerText =
"///<";
1528 MagicMarkerText =
"/**<";
1531 llvm_unreachable(
"if this is an almost Doxygen comment, " 1532 "it should be ordinary");
1534 Diag(Comment.
getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) <<
1551 llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {}
1570 OverloadSet.
clear();
1573 bool IsMemExpr =
false;
1587 bool Ambiguous =
false;
1592 DeclsEnd = Overloads->
decls_end(); it != DeclsEnd; ++it) {
1600 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) {
1601 if (OverloadDecl->getMinRequiredArguments() == 0) {
1602 if (!ZeroArgCallReturnTy.
isNull() && !Ambiguous &&
1603 (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() ||
1604 OverloadDecl->isCPUSpecificMultiVersion()))) {
1608 ZeroArgCallReturnTy = OverloadDecl->getReturnType();
1609 IsMV = OverloadDecl->isCPUDispatchMultiVersion() ||
1610 OverloadDecl->isCPUSpecificMultiVersion();
1618 return !ZeroArgCallReturnTy.
isNull();
1631 ZeroArgCallReturnTy = R.
get()->getType();
1638 if (
const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
1639 if (Fun->getMinRequiredArguments() == 0)
1640 ZeroArgCallReturnTy = Fun->getReturnType();
1656 dyn_cast_or_null<FunctionProtoType>(FunTy)) {
1657 if (FPT->getNumParams() == 0)
1678 int ShownOverloads = 0;
1679 int SuppressedOverloads = 0;
1681 DeclsEnd = Overloads.
end(); It != DeclsEnd; ++It) {
1685 ++SuppressedOverloads;
1692 if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() &&
1693 !FD->getAttr<TargetAttr>()->isDefaultVersion())
1700 if (SuppressedOverloads)
1701 S.
Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
1702 << SuppressedOverloads;
1707 bool (*IsPlausibleResult)(
QualType)) {
1708 if (!IsPlausibleResult)
1713 DeclsEnd = Overloads.
end(); It != DeclsEnd; ++It) {
1714 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It);
1716 if (IsPlausibleResult(OverloadResultTy))
1717 PlausibleOverloads.
addDecl(It.getDecl());
1728 return (!isa<CStyleCastExpr>(E) &&
1729 !isa<UnaryOperator>(E) &&
1730 !isa<BinaryOperator>(E) &&
1731 !isa<CXXOperatorCallExpr>(E));
1735 if (
const auto *UO = dyn_cast<UnaryOperator>(E))
1736 E = UO->getSubExpr();
1738 if (
const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
1739 if (ULE->getNumDecls() == 0)
1742 const NamedDecl *ND = *ULE->decls_begin();
1743 if (
const auto *FD = dyn_cast<FunctionDecl>(ND))
1744 return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion();
1751 bool (*IsPlausibleResult)(
QualType)) {
1758 !ZeroArgCallTy.
isNull() &&
1759 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
1766 Diag(Loc, PD) << 1 << IsMV << Range
1780 if (!ForceComplain)
return false;
1783 Diag(Loc, PD) << 0 << IsMV << Range;
1797 if (!Ident___float128)
1799 return Ident___float128;
1818 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> &
1827 ExtStr.split(Exts,
" ", -1,
false);
1829 for (
auto &I : Exts)
1830 OpenCLTypeExtMap[CanT].insert(I.str());
1835 ExtStr.split(Exts,
" ", -1,
false);
1838 for (
auto &I : Exts)
1839 OpenCLDeclExtMap[FD].insert(I.str());
1843 if (CurrOpenCLExtension.empty())
1849 if (CurrOpenCLExtension.empty())
1855 auto Loc = OpenCLDeclExtMap.find(FD);
1856 if (Loc == OpenCLDeclExtMap.end())
1858 for (
auto &I : Loc->second) {
1865 template <
typename T,
typename DiagLocT,
typename DiagInfoT,
typename MapT>
1866 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc,
1867 DiagInfoT DiagInfo, MapT &Map,
1870 auto Loc = Map.find(D);
1871 if (Loc == Map.end())
1873 bool Disabled =
false;
1874 for (
auto &I : Loc->second) {
1876 Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo
1887 if (
auto TypedefT = dyn_cast<TypedefType>(QT.
getTypePtr()))
1888 Decl = TypedefT->getDecl();
1890 Decl = TagT->getDecl();
1892 if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap))
1897 QT, OpenCLTypeExtMap);
1902 return checkOpenCLDisabledTypeOrDecl(&D, E.
getLocStart(), 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.
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.
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.
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))
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.
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.
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.
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.
void enableSupportedCore(unsigned CLVer)
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.
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.
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.
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.
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.
Expr - 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)
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
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.
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()
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'...
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
SourceLocation getLocStart() const LLVM_READONLY
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...
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.
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...
DeclarationName - 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 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...
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...
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).
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.
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.
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.
SmallVector< std::pair< const CXXMethodDecl *, const CXXMethodDecl * >, 2 > DelayedExceptionSpecChecks
All the overriding functions seen during a class definition that had their exception spec checks dela...
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.