40 #include "llvm/ADT/DenseMap.h" 41 #include "llvm/ADT/SmallSet.h" 42 using namespace clang;
59 Policy.
Bool = BoolMacro->isObjectLike() &&
60 BoolMacro->getNumTokens() == 1 &&
61 BoolMacro->getReplacementToken(0).is(tok::kw__Bool);
81 void set(
Sema &S) { this->S = &S; }
95 IncludeStack.push_back(IncludeLoc);
102 if (!IncludeStack.empty())
105 IncludeStack.pop_back_val());
118 : ExternalSource(nullptr), isMultiplexExternalSource(
false),
119 FPFeatures(pp.getLangOpts()), LangOpts(pp.getLangOpts()), PP(pp),
120 Context(ctxt), Consumer(consumer), Diags(PP.getDiagnostics()),
121 SourceMgr(PP.getSourceManager()), CollectStats(
false),
122 CodeCompleter(CodeCompleter), CurContext(nullptr),
123 OriginalLexicalContext(nullptr), MSStructPragmaOn(
false),
124 MSPointerToMemberRepresentationMethod(
125 LangOpts.getMSPointerToMemberRepresentationMethod()),
126 VtorDispStack(MSVtorDispAttr::Mode(LangOpts.VtorDispMode)), PackStack(0),
127 DataSegStack(nullptr), BSSSegStack(nullptr), ConstSegStack(nullptr),
128 CodeSegStack(nullptr), CurInitSeg(nullptr), VisContext(nullptr),
129 PragmaAttributeCurrentTargetDecl(nullptr),
144 CurScope(
nullptr), Ident_super(
nullptr), Ident___float128(
nullptr) {
147 LoadedExternalKnownNamespaces =
false;
167 InitDataSharingAttributesStack();
169 std::unique_ptr<sema::SemaPPCallbacks> Callbacks =
170 llvm::make_unique<sema::SemaPPCallbacks>();
171 SemaPPCallbackHandler = Callbacks.get();
173 SemaPPCallbackHandler->set(*
this);
184 SC->InitializeSema(*
this);
189 ExternalSema->InitializeSema(*
this);
297 std::vector<QualType> Atomic64BitTypes;
298 Atomic64BitTypes.push_back(AtomicLongT);
299 Atomic64BitTypes.push_back(AtomicULongT);
300 Atomic64BitTypes.push_back(AtomicDoubleT);
302 Atomic64BitTypes.push_back(AtomicSizeT);
303 Atomic64BitTypes.push_back(AtomicIntPtrT);
304 Atomic64BitTypes.push_back(AtomicUIntPtrT);
305 Atomic64BitTypes.push_back(AtomicPtrDiffT);
307 for (
auto &I : Atomic64BitTypes)
309 "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics");
316 #define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \ 317 setOpenCLExtensionForType(Context.Id, Ext); 318 #include "clang/Basic/OpenCLImageTypes.def" 347 ExternalSema->ForgetSema();
350 if (isMultiplexExternalSource)
351 delete ExternalSource;
356 DestroyDataSharingAttributesStack();
360 SemaPPCallbackHandler->
reset();
362 assert(DelayedTypos.empty() &&
"Uncorrected typos!");
370 UnavailableAttr::ImplicitReason reason) {
373 if (!fn)
return false;
384 if (fn->
hasAttr<UnavailableAttr>())
return true;
386 fn->
addAttr(UnavailableAttr::CreateImplicit(
Context,
"", reason, loc));
400 assert(E &&
"Cannot use with NULL ptr");
402 if (!ExternalSource) {
407 if (isMultiplexExternalSource)
411 isMultiplexExternalSource =
true;
417 llvm::errs() <<
"\n*** Semantic Analysis Stats:\n";
435 Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;
446 if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)
474 llvm_unreachable(
"can't implicitly cast lvalue to rvalue with this cast " 476 case CK_LValueToRValue:
477 case CK_ArrayToPointerDecay:
478 case CK_FunctionToPointerDecay:
492 if (ExprTy == TypeTy)
504 E = Materialized.
get();
508 if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {
509 ImpCast->setType(Ty);
510 ImpCast->setValueKind(VK);
532 llvm_unreachable(
"unknown scalar type kind");
543 if (
const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
547 for (
const auto *Spec : Template->specializations())
554 if (FD->hasBody(DeclToCheck))
560 if (DeclToCheck != FD)
564 if (
const VarDecl *VD = dyn_cast<VarDecl>(D)) {
570 if (VD->isReferenced() &&
571 VD->isUsableInConstantExpressions(SemaRef->
Context))
577 for (
const auto *Spec : Template->specializations())
590 if (DeclToCheck != VD)
598 if (
auto *FD = dyn_cast<FunctionDecl>(ND))
599 return FD->isExternC();
625 if (ND->
hasAttr<WeakRefAttr>())
continue;
627 if (isa<CXXDeductionGuideDecl>(ND))
630 if (ND->
hasAttr<DLLImportAttr>() || ND->
hasAttr<DLLExportAttr>()) {
640 if (FD->isExternallyVisible() &&
642 !FD->getMostRecentDecl()->isInlined())
645 auto *VD = cast<VarDecl>(ND);
648 if (VD->isExternallyVisible() &&
650 !VD->getMostRecentDecl()->isInline())
654 Undefined.push_back(std::make_pair(ND, UndefinedUse.second));
666 if (Undefined.empty())
return;
668 for (
auto Undef : Undefined) {
669 ValueDecl *VD = cast<ValueDecl>(Undef.first);
683 ? diag::ext_undefined_internal_type
684 : diag::err_undefined_internal_type)
685 << isa<VarDecl>(VD) << VD;
691 << isa<VarDecl>(VD) << VD;
692 }
else if (
auto *FD = dyn_cast<FunctionDecl>(VD)) {
694 assert(FD->getMostRecentDecl()->isInlined() &&
695 "used object requires definition but isn't inline or internal?");
699 assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() &&
700 "used var requires definition but isn't inline or internal?");
703 if (UseLoc.isValid())
704 S.
Diag(UseLoc, diag::note_used_here);
716 for (
auto &WeakID : WeakIDs)
730 RecordCompleteMap::iterator
Cache = MNCComplete.find(RD);
731 if (Cache != MNCComplete.end())
732 return Cache->second;
735 bool Complete =
true;
738 I != E && Complete; ++I) {
740 Complete = M->isDefined() || M->isDefaulted() ||
741 (M->isPure() && !isa<CXXDestructorDecl>(M));
747 Complete = !F->getTemplatedDecl()->isLateTemplateParsed() &&
748 F->getTemplatedDecl()->isDefined();
749 else if (
const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) {
750 if (R->isInjectedClassName())
752 if (R->hasDefinition())
759 MNCComplete[RD] = Complete;
773 RecordCompleteMap::iterator
Cache = RecordsComplete.find(RD);
774 if (Cache != RecordsComplete.end())
775 return Cache->second;
779 I != E && Complete; ++I) {
783 if (
CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl())
790 dyn_cast<FunctionDecl>((*I)->getFriendDecl()))
791 Complete = FD->isDefined();
797 RecordsComplete[RD] = Complete;
806 if (TD->isReferenced())
808 Diag(TD->getLocation(), diag::warn_unused_local_typedef)
809 << isa<TypeAliasDecl>(TD) << TD->getDeclName();
811 UnusedLocalTypedefNameCandidates.clear();
826 assert(GlobalModule &&
"module creation should not fail");
829 ModuleScopes.push_back({});
830 ModuleScopes.back().Module = GlobalModule;
831 VisibleModules.
setVisible(GlobalModule, StartOfTU);
836 TU->setLocalOwningModule(GlobalModule);
845 &&
"reached end of translation unit with a pool attached?");
871 if (ExternalSource) {
875 for (
auto PII : Pending)
876 if (
auto Func = dyn_cast<FunctionDecl>(PII.first))
877 Func->setInstantiationIsPending(
true);
879 Pending.begin(), Pending.end());
921 if (WeakID.second.getUsed())
926 if (PrevDecl !=
nullptr &&
927 !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))
928 Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type)
931 Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared)
954 diag::err_module_declaration_missing);
963 Stack.push_back(CurrentModule);
964 while (!Stack.empty()) {
965 Module *Mod = Stack.pop_back_val();
1001 llvm::SmallSet<VarDecl *, 32> Seen;
1002 for (TentativeDefinitionsType::iterator
1024 diag::err_tentative_def_incomplete_type))
1040 for (UnusedFileScopedDeclsType::iterator
1046 if (
const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
1048 if (!FD->hasBody(DiagD))
1053 if (isa<CXXMethodDecl>(DiagD))
1057 if (FD->getStorageClass() ==
SC_Static &&
1058 !FD->isInlineSpecified() &&
1062 diag::warn_unneeded_static_internal_decl)
1069 if (FD->getDescribedFunctionTemplate())
1074 isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function
1075 : diag::warn_unused_function)
1081 DiagD = cast<VarDecl>(*I);
1123 for (
const auto &DeletedFieldInfo :
DeleteExprs) {
1125 AnalyzeDeleteExprMismatch(DeletedFieldInfo.first,
DeleteExprLoc.first,
1135 "Didn't unmark var as having its initializer parsed");
1150 if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC)) {
1152 }
else if (isa<CXXMethodDecl>(DC) &&
1153 cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call &&
1154 cast<CXXRecordDecl>(DC->
getParent())->isLambda()) {
1173 while (isa<RecordDecl>(DC))
1180 if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
1181 return cast<NamedDecl>(DC);
1207 if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1209 (*Info)->addSFINAEDiagnostic(DiagInfo.
getLocation(),
1232 if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1234 (*Info)->addSFINAEDiagnostic(DiagInfo.
getLocation(),
1243 Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);
1256 (*Info)->addSuppressedDiagnostic(DiagInfo.
getLocation(),
1348 pushOpenMPFunctionRegion();
1354 pushOpenMPFunctionRegion();
1359 BlockScope, Block));
1370 LSI->AutoTemplateParameterDepth =
Depth;
1374 "Remove assertion if intentionally called in a non-lambda context.");
1383 popOpenMPFunctionRegion(Scope);
1390 Diag(PUD.Loc, PUD.PD);
1402 assert(!CurFunction->
CompoundScopes.empty() &&
"mismatched push/pop");
1418 if (CurBSI && CurBSI->TheDecl &&
1433 if (IgnoreNonLambdaCapturingScope) {
1435 while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I))
1441 if (CurLSI && CurLSI->Lambda &&
1454 return (LSI->AutoTemplateParams.size() ||
1455 LSI->GLTemplateParameterList) ? LSI :
nullptr;
1462 if (!
LangOpts.RetainCommentsFromSystemHeaders &&
1470 StringRef MagicMarkerText;
1473 MagicMarkerText =
"///<";
1476 MagicMarkerText =
"/**<";
1479 llvm_unreachable(
"if this is an almost Doxygen comment, " 1480 "it should be ordinary");
1482 Diag(Comment.
getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) <<
1499 llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {}
1506 if (!Loc.
isValid() && TheDecl) Loc = TheDecl->getLocation();
1513 if (
auto *ND = dyn_cast_or_null<NamedDecl>(TheDecl)) {
1515 ND->getNameForDiagnostic(OS, ND->getASTContext().getPrintingPolicy(),
true);
1536 OverloadSet.
clear();
1539 bool IsMemExpr =
false;
1553 bool Ambiguous =
false;
1557 DeclsEnd = Overloads->
decls_end(); it != DeclsEnd; ++it) {
1565 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) {
1566 if (OverloadDecl->getMinRequiredArguments() == 0) {
1567 if (!ZeroArgCallReturnTy.
isNull() && !Ambiguous) {
1571 ZeroArgCallReturnTy = OverloadDecl->getReturnType();
1578 return !ZeroArgCallReturnTy.
isNull();
1591 ZeroArgCallReturnTy = R.
get()->getType();
1598 if (
const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
1599 if (Fun->getMinRequiredArguments() == 0)
1600 ZeroArgCallReturnTy = Fun->getReturnType();
1616 dyn_cast_or_null<FunctionProtoType>(FunTy)) {
1617 if (FPT->getNumParams() == 0)
1638 int ShownOverloads = 0;
1639 int SuppressedOverloads = 0;
1641 DeclsEnd = Overloads.
end(); It != DeclsEnd; ++It) {
1645 ++SuppressedOverloads;
1654 if (SuppressedOverloads)
1655 S.
Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
1656 << SuppressedOverloads;
1661 bool (*IsPlausibleResult)(
QualType)) {
1662 if (!IsPlausibleResult)
1667 DeclsEnd = Overloads.
end(); It != DeclsEnd; ++It) {
1668 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It);
1670 if (IsPlausibleResult(OverloadResultTy))
1671 PlausibleOverloads.
addDecl(It.getDecl());
1682 return (!isa<CStyleCastExpr>(E) &&
1683 !isa<UnaryOperator>(E) &&
1684 !isa<BinaryOperator>(E) &&
1685 !isa<CXXOperatorCallExpr>(E));
1690 bool (*IsPlausibleResult)(
QualType)) {
1697 !ZeroArgCallTy.
isNull() &&
1698 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
1718 if (!ForceComplain)
return false;
1720 Diag(Loc, PD) << 0 << Range;
1733 if (!Ident___float128)
1735 return Ident___float128;
1754 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> &
1763 ExtStr.split(Exts,
" ", -1,
false);
1765 for (
auto &I : Exts)
1766 OpenCLTypeExtMap[CanT].insert(I.str());
1771 ExtStr.split(Exts,
" ", -1,
false);
1774 for (
auto &I : Exts)
1775 OpenCLDeclExtMap[FD].insert(I.str());
1779 if (CurrOpenCLExtension.empty())
1785 if (CurrOpenCLExtension.empty())
1791 auto Loc = OpenCLDeclExtMap.find(FD);
1792 if (Loc == OpenCLDeclExtMap.end())
1794 for (
auto &I : Loc->second) {
1801 template <
typename T,
typename DiagLocT,
typename DiagInfoT,
typename MapT>
1802 bool Sema::checkOpenCLDisabledTypeOrDecl(
T D, DiagLocT DiagLoc,
1803 DiagInfoT DiagInfo, MapT &Map,
1806 auto Loc = Map.find(D);
1807 if (Loc == Map.end())
1809 bool Disabled =
false;
1810 for (
auto &I : Loc->second) {
1812 Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo
1823 if (
auto TypedefT = dyn_cast<TypedefType>(QT.
getTypePtr()))
1824 Decl = TypedefT->getDecl();
1826 Decl = TagT->getDecl();
1828 if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap))
1833 QT, OpenCLTypeExtMap);
1838 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...
An instance of this class is created to represent 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.
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
isCompleteDefinition - 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.
VarDecl - An instance of this class is created to represent 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.
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
getIdentifier - Get the identifier that names this declaration, if there is one.
RecordDecl - 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
getDeclName - 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)
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
void print(raw_ostream &OS, const SourceManager &SM) 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...
FieldDecl - An instance of this class is created by Sema::ActOnField to represent a member of a struc...
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.
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.
This 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.
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 >> &)
bool isEnabled(llvm::StringRef Ext) const
Scope * getCurScope() const
Retrieve the parser's current scope.
CommentOptions CommentOpts
Options for parsing comments.
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...
BlockDecl - This represents a block literal declaration, which is like an unnamed FunctionDecl...
ValueDecl - Represent the declaration of a variable (in which case it is an lvalue) a function (in wh...
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...
const FunctionProtoType * T
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...
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...
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.
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)
void print(raw_ostream &OS) const override
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.
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.
SmallVector< PossiblyUnreachableDiag, 4 > PossiblyUnreachableDiags
A list of PartialDiagnostics created but delayed within the current function scope.
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.
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. ...
NamedDecl - This represents a decl with 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'.
SourceLocation getLocStart() const LLVM_READONLY
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.