clang
8.0.0
|
#include "clang/AST/ASTContext.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclLookups.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Lex/HeaderSearch.h"
#include "clang/Lex/ModuleLoader.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/DeclSpec.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/Overload.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/Sema.h"
#include "clang/Sema/SemaInternal.h"
#include "clang/Sema/TemplateDeduction.h"
#include "clang/Sema/TypoCorrection.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/TinyPtrVector.h"
#include "llvm/ADT/edit_distance.h"
#include "llvm/Support/ErrorHandling.h"
#include <algorithm>
#include <iterator>
#include <list>
#include <set>
#include <utility>
#include <vector>
#include "clang/AST/TypeNodes.def"
Go to the source code of this file.
Macros | |
#define | TYPE(Class, Base) |
#define | DEPENDENT_TYPE(Class, Base) case Type::Class: |
#define | NON_CANONICAL_TYPE(Class, Base) case Type::Class: |
#define | NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class: |
#define | ABSTRACT_TYPE(Class, Base) |
Functions | |
static unsigned | getIDNS (Sema::LookupNameKind NameKind, bool CPlusPlus, bool Redeclaration) |
static DeclContext * | getContextForScopeMatching (Decl *D) |
Get a representative context for a declaration such that two declarations will have the same context if they were found within the same scope. More... | |
static bool | isPreferredLookupResult (Sema &S, Sema::LookupNameKind Kind, NamedDecl *D, NamedDecl *Existing) |
Determine whether D is a better lookup result than Existing , given that they declare the same entity. More... | |
static bool | canHideTag (NamedDecl *D) |
Determine whether D can hide a tag declaration. More... | |
static bool | LookupBuiltin (Sema &S, LookupResult &R) |
Lookup a builtin function, when name lookup would otherwise fail. More... | |
static bool | CanDeclareSpecialMemberFunction (const CXXRecordDecl *Class) |
Determine whether we can declare a special member function within the class at this point. More... | |
static bool | isImplicitlyDeclaredMemberFunctionName (DeclarationName Name) |
Determine whether this is the name of an implicitly-declared special member function. More... | |
static void | DeclareImplicitMemberFunctionsWithName (Sema &S, DeclarationName Name, SourceLocation Loc, const DeclContext *DC) |
If there are any implicit member functions with the given name that need to be declared in the given declaration context, do so. More... | |
static bool | LookupDirect (Sema &S, LookupResult &R, const DeclContext *DC) |
static bool | CppNamespaceLookup (Sema &S, LookupResult &R, ASTContext &Context, DeclContext *NS, UnqualUsingDirectiveSet &UDirs) |
static bool | isNamespaceOrTranslationUnitScope (Scope *S) |
static std::pair< DeclContext *, bool > | findOuterContext (Scope *S) |
static Module * | getDefiningModule (Sema &S, Decl *Entity) |
Find the module in which the given declaration was defined. More... | |
static bool | isInCurrentModule (const Module *M, const LangOptions &LangOpts) |
Determine whether the module M is part of the current module from the perspective of a module-private visibility check. More... | |
template<typename ParmDecl > | |
static bool | hasVisibleDefaultArgument (Sema &S, const ParmDecl *D, llvm::SmallVectorImpl< Module *> *Modules) |
template<typename Filter > | |
static bool | hasVisibleDeclarationImpl (Sema &S, const NamedDecl *D, llvm::SmallVectorImpl< Module *> *Modules, Filter F) |
static NamedDecl * | findAcceptableDecl (Sema &SemaRef, NamedDecl *D, unsigned IDNS) |
Retrieve the visible declaration corresponding to D, if any. More... | |
static bool | LookupQualifiedNameInUsingDirectives (Sema &S, LookupResult &R, DeclContext *StartDC) |
Perform qualified name lookup in the namespaces nominated by using directives by the given context. More... | |
static bool | LookupAnyMember (const CXXBaseSpecifier *Specifier, CXXBasePath &Path, DeclarationName Name) |
Callback that looks for any member of a class with the given name. More... | |
template<typename InputIterator > | |
static bool | HasOnlyStaticMembers (InputIterator First, InputIterator Last) |
Determine whether the given set of member declarations contains only static members, nested types, and enumerators. More... | |
static void | addAssociatedClassesAndNamespaces (AssociatedLookup &Result, QualType T) |
static void | CollectEnclosingNamespace (Sema::AssociatedNamespaceSet &Namespaces, DeclContext *Ctx) |
static void | addAssociatedClassesAndNamespaces (AssociatedLookup &Result, const TemplateArgument &Arg) |
static void | addAssociatedClassesAndNamespaces (AssociatedLookup &Result, CXXRecordDecl *Class) |
static void | LookupVisibleDecls (DeclContext *Ctx, LookupResult &Result, bool QualifiedNameLookup, bool InBaseClass, VisibleDeclConsumer &Consumer, VisibleDeclsRecord &Visited, bool IncludeDependentBases, bool LoadExternal) |
static void | LookupVisibleDecls (Scope *S, LookupResult &Result, UnqualUsingDirectiveSet &UDirs, VisibleDeclConsumer &Consumer, VisibleDeclsRecord &Visited, bool LoadExternal) |
static bool | isCandidateViable (CorrectionCandidateCallback &CCC, TypoCorrection &Candidate) |
static void | LookupPotentialTypoResult (Sema &SemaRef, LookupResult &Res, IdentifierInfo *Name, Scope *S, CXXScopeSpec *SS, DeclContext *MemberContext, bool EnteringContext, bool isObjCIvarLookup, bool FindHidden) |
Perform name lookup for a possible result for typo correction. More... | |
static void | checkCorrectionVisibility (Sema &SemaRef, TypoCorrection &TC) |
Check whether the declarations found for a typo correction are visible. More... | |
static void | getNestedNameSpecifierIdentifiers (NestedNameSpecifier *NNS, SmallVectorImpl< const IdentifierInfo *> &Identifiers) |
static void | AddKeywordsToConsumer (Sema &SemaRef, TypoCorrectionConsumer &Consumer, Scope *S, CorrectionCandidateCallback &CCC, bool AfterNestedNameSpecifier) |
Add keywords to the consumer as possible typo corrections. More... | |
static NamedDecl * | getDefinitionToImport (NamedDecl *D) |
Find which declaration we should import to provide the definition of the given declaration. More... | |
static std::string | getIncludeStringForHeader (Preprocessor &PP, const FileEntry *E) |
Get a "quoted.h" or <angled.h> include path to use in a diagnostic suggesting the addition of a #include of the specified file. More... | |
Variables | |
static const unsigned | MaxTypoDistanceResultSets = 5 |
#define ABSTRACT_TYPE | ( | Class, | |
Base | |||
) |
#define DEPENDENT_TYPE | ( | Class, | |
Base | |||
) | case Type::Class: |
#define NON_CANONICAL_TYPE | ( | Class, | |
Base | |||
) | case Type::Class: |
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE | ( | Class, | |
Base | |||
) | case Type::Class: |
#define TYPE | ( | Class, | |
Base | |||
) |
|
static |
Definition at line 2597 of file SemaLookup.cpp.
References clang::Auto, CollectEnclosingNamespace(), clang::Type::getCanonicalTypeInternal(), clang::MemberPointerType::getClass(), clang::Decl::getDeclContext(), clang::MemberPointerType::getPointeeType(), clang::FunctionType::getReturnType(), clang::Type::getTypeClass(), clang::QualType::getTypePtr(), and clang::FunctionProtoType::param_types().
Referenced by addAssociatedClassesAndNamespaces().
|
static |
Definition at line 2451 of file SemaLookup.cpp.
References addAssociatedClassesAndNamespaces(), CollectEnclosingNamespace(), clang::TemplateArgument::Declaration, clang::TemplateArgument::Expression, clang::TemplateName::getAsTemplateDecl(), clang::TemplateArgument::getAsTemplateOrTemplatePattern(), clang::TemplateArgument::getAsType(), clang::TemplateArgument::getKind(), clang::TemplateArgument::Integral, clang::TemplateArgument::Null, clang::TemplateArgument::NullPtr, clang::TemplateArgument::Pack, clang::TemplateArgument::pack_elements(), clang::TemplateArgument::Template, clang::TemplateArgument::TemplateExpansion, and clang::TemplateArgument::Type.
|
static |
Definition at line 2502 of file SemaLookup.cpp.
References addAssociatedClassesAndNamespaces(), clang::CXXRecordDecl::bases(), clang::CXXRecordDecl::bases_begin(), clang::CXXRecordDecl::bases_end(), CollectEnclosingNamespace(), clang::RecordType::getDecl(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), and clang::TemplateArgumentList::size().
|
static |
Add keywords to the consumer as possible typo corrections.
Definition at line 4401 of file SemaLookup.cpp.
References clang::TypoCorrectionConsumer::addKeywordResult(), clang::Sema::CurContext, clang::Scope::getBreakParent(), clang::Scope::getContinueParent(), clang::Sema::getCurBlock(), clang::Sema::getCurFunction(), clang::Sema::getCurFunctionOrMethodDecl(), clang::Sema::getLangOpts(), clang::Scope::isClassScope(), clang::DeclContext::isDependentContext(), clang::sema::FunctionScopeInfo::SwitchStack, clang::CorrectionCandidateCallback::WantCXXNamedCasts, clang::CorrectionCandidateCallback::WantExpressionKeywords, clang::CorrectionCandidateCallback::WantFunctionLikeCasts, clang::CorrectionCandidateCallback::WantObjCSuper, clang::CorrectionCandidateCallback::WantRemainingKeywords, and clang::CorrectionCandidateCallback::WantTypeSpecifiers.
|
static |
Determine whether we can declare a special member function within the class at this point.
Definition at line 716 of file SemaLookup.cpp.
References clang::CXXRecordDecl::getDefinition(), clang::TagDecl::isBeingDefined(), and clang::DeclContext::isDependentContext().
Referenced by clang::Sema::ForceDeclarationOfImplicitMembers(), clang::Sema::LookupConstructors(), and clang::Sema::LookupSpecialMember().
Determine whether D
can hide a tag declaration.
Definition at line 449 of file SemaLookup.cpp.
References clang::NamedDecl::getUnderlyingDecl().
|
static |
Check whether the declarations found for a typo correction are visible.
Set the correction's RequiresImport flag to true if none of the declarations are visible, false otherwise.
Definition at line 3863 of file SemaLookup.cpp.
References clang::TypoCorrection::begin(), clang::TypoCorrection::end(), clang::LookupResult::isVisible(), clang::TypoCorrection::setCorrectionDecls(), and clang::TypoCorrection::setRequiresImport().
|
static |
Definition at line 2430 of file SemaLookup.cpp.
References clang::DeclContext::getParent(), clang::DeclContext::getPrimaryContext(), clang::DeclContext::isFileContext(), clang::DeclContext::isInlineNamespace(), clang::DeclContext::isRecord(), and clang::DeclContext::isTransparentContext().
Referenced by addAssociatedClassesAndNamespaces().
|
static |
Definition at line 934 of file SemaLookup.cpp.
|
static |
If there are any implicit member functions with the given name that need to be declared in the given declaration context, do so.
Definition at line 776 of file SemaLookup.cpp.
Referenced by LookupDirect().
Retrieve the visible declaration corresponding to D, if any.
This routine determines whether the declaration D is visible in the current module, with the current imports. If not, it checks whether any redeclaration of D is visible, and if so, returns that declaration.
Definition at line 1656 of file SemaLookup.cpp.
References clang::LookupResult::isVisible(), and clang::Decl::redecls().
Referenced by clang::Sema::hasVisibleDeclarationSlow().
|
static |
Definition at line 966 of file SemaLookup.cpp.
References clang::frontend::CPlusPlus, clang::DeclContext::Encloses(), clang::DeclContext::Equals(), clang::Scope::getEntity(), clang::LookupResult::getIdentifierNamespace(), clang::Scope::getParent(), clang::DeclContext::getParent(), clang::Decl::IDNS_LocalExtern, clang::Decl::IDNS_NonMemberOperator, clang::Decl::IDNS_Ordinary, clang::DeclContext::isFileContext(), clang::Scope::isTemplateParamScope(), and clang::LookupResult::setFindLocalExtern().
Referenced by LookupVisibleDecls().
|
static |
Get a representative context for a declaration such that two declarations will have the same context if they were found within the same scope.
Definition at line 344 of file SemaLookup.cpp.
References clang::Decl::getDeclContext(), clang::Decl::getLexicalDeclContext(), clang::DeclContext::getRedeclContext(), and clang::DeclContext::isFunctionOrMethod().
Find the module in which the given declaration was defined.
Definition at line 1356 of file SemaLookup.cpp.
References clang::VarDecl::getTemplateInstantiationPattern(), clang::CXXRecordDecl::getTemplateInstantiationPattern(), and clang::FunctionDecl::getTemplateInstantiationPattern().
Referenced by clang::Sema::getLookupModules().
Find which declaration we should import to provide the definition of the given declaration.
Definition at line 5023 of file SemaLookup.cpp.
Referenced by clang::Sema::diagnoseMissingImport().
|
inlinestatic |
Definition at line 207 of file SemaLookup.cpp.
References clang::frontend::CPlusPlus, Id, clang::Decl::IDNS_Label, clang::Decl::IDNS_LocalExtern, clang::Decl::IDNS_Member, clang::Decl::IDNS_Namespace, clang::Decl::IDNS_NonMemberOperator, clang::Decl::IDNS_ObjCProtocol, clang::Decl::IDNS_OMPReduction, clang::Decl::IDNS_Ordinary, clang::Decl::IDNS_OrdinaryFriend, clang::Decl::IDNS_Tag, clang::Decl::IDNS_TagFriend, clang::Decl::IDNS_Type, clang::Decl::IDNS_Using, clang::Sema::LookupAnyName, clang::Sema::LookupLabel, clang::Sema::LookupLocalFriendName, clang::Sema::LookupMemberName, clang::Sema::LookupNamespaceName, clang::Sema::LookupNestedNameSpecifierName, clang::Sema::LookupObjCImplicitSelfParam, clang::Sema::LookupObjCProtocolName, clang::Sema::LookupOMPReductionName, clang::Sema::LookupOperatorName, clang::Sema::LookupOrdinaryName, clang::Sema::LookupRedeclarationWithLinkage, clang::Sema::LookupTagName, and clang::Sema::LookupUsingDeclName.
|
static |
Get a "quoted.h" or <angled.h> include path to use in a diagnostic suggesting the addition of a #include of the specified file.
Definition at line 5061 of file SemaLookup.cpp.
References clang::Preprocessor::getHeaderSearchInfo(), and clang::HeaderSearch::suggestPathToFileForDiagnostics().
Referenced by clang::Sema::diagnoseMissingImport().
|
static |
Definition at line 3901 of file SemaLookup.cpp.
References clang::NestedNameSpecifier::getAsIdentifier(), clang::NestedNameSpecifier::getAsNamespace(), clang::NestedNameSpecifier::getAsNamespaceAlias(), clang::NestedNameSpecifier::getAsType(), clang::NamedDecl::getIdentifier(), clang::NestedNameSpecifier::getKind(), clang::NestedNameSpecifier::getPrefix(), clang::NestedNameSpecifier::Global, clang::NestedNameSpecifier::Identifier, clang::NamespaceDecl::isAnonymousNamespace(), clang::NestedNameSpecifier::Namespace, clang::NestedNameSpecifier::NamespaceAlias, clang::NestedNameSpecifier::Super, clang::NestedNameSpecifier::TypeSpec, and clang::NestedNameSpecifier::TypeSpecWithTemplate.
|
static |
Determine whether the given set of member declarations contains only static members, nested types, and enumerators.
Definition at line 1962 of file SemaLookup.cpp.
References clang::NamedDecl::getUnderlyingDecl().
|
static |
Definition at line 1450 of file SemaLookup.cpp.
References clang::Sema::isVisible(), and clang::Decl::redecls().
Referenced by clang::Sema::hasVisibleDeclarationSlow(), clang::Sema::hasVisibleExplicitSpecialization(), and clang::Sema::hasVisibleMemberSpecialization().
|
static |
Definition at line 1418 of file SemaLookup.cpp.
References clang::Sema::getOwningModule(), and clang::Sema::isVisible().
Referenced by clang::Sema::CheckDeductionGuideTemplate(), clang::Sema::CheckTemplateParameterList(), clang::Sema::hasVisibleDefaultArgument(), clang::Sema::hasVisibleDefinition(), and clang::Sema::SubstDefaultTemplateArgumentIfAvailable().
|
static |
|
static |
Determine whether this is the name of an implicitly-declared special member function.
Definition at line 758 of file SemaLookup.cpp.
|
static |
Determine whether the module M is part of the current module from the perspective of a module-private visibility check.
Definition at line 1395 of file SemaLookup.cpp.
References clang::LangOptions::CurrentModule, clang::Module::getTopLevelModuleName(), clang::Module::GlobalModuleFragment, clang::Module::Kind, and clang::Module::Parent.
Referenced by clang::Sema::isModuleVisible().
Definition at line 953 of file SemaLookup.cpp.
References clang::Scope::getEntity(), and clang::DeclContext::isFileContext().
|
static |
Determine whether D
is a better lookup result than Existing
, given that they declare the same entity.
Definition at line 359 of file SemaLookup.cpp.
References clang::Decl::getPreviousDecl(), clang::ValueDecl::getType(), clang::NamedDecl::getUnderlyingDecl(), clang::Sema::hasVisibleDefaultArgument(), clang::Type::isIncompleteType(), clang::Sema::isVisible(), clang::Sema::LookupTagName, and clang::Sema::LookupUsingDeclName.
|
static |
Callback that looks for any member of a class with the given name.
Definition at line 1951 of file SemaLookup.cpp.
|
static |
Lookup a builtin function, when name lookup would otherwise fail.
Definition at line 672 of file SemaLookup.cpp.
References clang::LookupResult::addDecl(), clang::ASTContext::BuiltinInfo, clang::Sema::Context, clang::DeclarationName::getAsIdentifierInfo(), clang::Sema::getASTContext(), clang::IdentifierInfo::getBuiltinID(), clang::Sema::getLangOpts(), clang::LookupResult::getLookupKind(), clang::LookupResult::getLookupName(), clang::ASTContext::getMakeIntegerSeqDecl(), clang::ASTContext::getMakeIntegerSeqName(), clang::LookupResult::getNameLoc(), clang::ASTContext::getTypePackElementDecl(), clang::ASTContext::getTypePackElementName(), clang::LookupResult::isForRedeclaration(), clang::Builtin::Context::isPredefinedLibFunction(), clang::Sema::LazilyCreateBuiltin(), clang::Sema::LookupOrdinaryName, clang::Sema::LookupRedeclarationWithLinkage, and clang::Sema::TUScope.
Referenced by LookupDirect().
|
static |
Definition at line 832 of file SemaLookup.cpp.
References clang::LookupResult::addDecl(), clang::CC_C, clang::Sema::Context, clang::CXXRecordDecl::conversion_begin(), clang::CXXRecordDecl::conversion_end(), clang::DeclarationName::CXXConversionFunctionName, DeclareImplicitMemberFunctionsWithName(), clang::Sema::DeduceTemplateArguments(), clang::EST_None, clang::FunctionProtoType::ExtProtoInfo::ExceptionSpec, clang::FunctionProtoType::ExtProtoInfo::ExtInfo, clang::LookupResult::getAcceptableDecl(), clang::Type::getAs(), clang::Type::getContainedDeducedType(), clang::DeclarationName::getCXXNameType(), clang::FunctionProtoType::getExtProtoInfo(), clang::ASTContext::getFunctionType(), clang::Sema::getLangOpts(), clang::LookupResult::getLookupName(), clang::DeclarationName::getNameKind(), clang::LookupResult::getNameLoc(), clang::LookupResult::getSema(), clang::FunctionTemplateDecl::getTemplatedDecl(), clang::ValueDecl::getType(), clang::TagDecl::isCompleteDefinition(), clang::Type::isDependentType(), clang::LookupResult::isForRedeclaration(), clang::DeclContext::isTranslationUnit(), clang::DeclContext::lookup(), LookupBuiltin(), clang::Sema::TDK_Success, and clang::FunctionType::ExtInfo::withCallingConv().
Referenced by LookupQualifiedNameInUsingDirectives().
|
static |
Perform name lookup for a possible result for typo correction.
Definition at line 4347 of file SemaLookup.cpp.
References clang::LookupResult::addDecl(), clang::LookupResult::clear(), clang::LookupResult::empty(), clang::Sema::getCurMethodDecl(), clang::LookupResult::getFoundDecl(), clang::Decl::isDefinedOutsideFunctionOrMethod(), clang::LookupResult::isSingleResult(), clang::Sema::LookupParsedName(), clang::Sema::LookupQualifiedName(), clang::OBJC_PR_query_instance, clang::LookupResult::resolveKind(), clang::LookupResult::setAllowHidden(), clang::LookupResult::setLookupName(), and clang::LookupResult::suppressDiagnostics().
Referenced by clang::TypoCorrectionConsumer::getNextCorrection(), and isCandidateViable().
|
static |
Perform qualified name lookup in the namespaces nominated by using directives by the given context.
C++98 [namespace.qual]p2: Given X::m (where X is a user-declared namespace), or given ::m (where X is the global namespace), let S be the set of all declarations of m in X and in the transitive closure of all namespaces nominated by using-directives in X and its used namespaces, except that using-directives are ignored in any namespace, including X, directly containing one or more declarations of m. No namespace is searched more than once in the lookup of a name. If S is the empty set, the program is ill-formed. Otherwise, if S has exactly one member, or if the context of the reference is a using-declaration (namespace.udecl), S is the required set of declarations of m. Otherwise if the use of m is not one that allows a unique declaration to be chosen from S, the program is ill-formed.
C++98 [namespace.qual]p5: During the lookup of a qualified namespace member name, if the lookup finds more than one declaration of the member, and if one declaration introduces a class name or enumeration name and the other declarations either introduce the same object, the same enumerator or a set of functions, the non-type name hides the class or enumeration name if and only if the declarations are from the same namespace; otherwise (the declarations are from different namespaces), the program is ill-formed.
Definition at line 1871 of file SemaLookup.cpp.
References clang::LookupResult::addAllDecls(), clang::LookupResult::clear(), clang::LookupResult::empty(), clang::NamespaceDecl::getOriginalNamespace(), clang::DeclContext::isFileContext(), clang::LookupResult::isSingleTagDecl(), clang::Sema::isVisible(), LookupDirect(), clang::LookupResult::resolveKind(), clang::LookupResult::setAmbiguousQualifiedTagHiding(), clang::LookupResult::Temporary, and clang::DeclContext::using_directives().
|
static |
Definition at line 3484 of file SemaLookup.cpp.
References clang::VisibleDeclConsumer::EnteredContext(), clang::Sema::getLangOpts(), clang::DeclContext::getPrimaryContext(), and clang::LookupResult::getSema().
Referenced by LookupVisibleDecls().
|
static |
Definition at line 3674 of file SemaLookup.cpp.
References clang::Sema::Context, clang::Scope::decls(), clang::DeclContext::Equals(), findOuterContext(), clang::VisibleDeclConsumer::FoundDecl(), clang::LookupResult::getAcceptableDecl(), clang::Scope::getEntity(), clang::LookupResult::getLookupName(), clang::DeclContext::getLookupParent(), clang::LookupResult::getNameLoc(), clang::Scope::getParent(), clang::LookupResult::getSema(), clang::ASTContext::getTranslationUnitDecl(), isFunctionOrMethod(), clang::DeclContext::isFunctionOrMethod(), clang::Sema::LookupMemberName, and LookupVisibleDecls().
|
static |
Definition at line 3994 of file SemaLookup.cpp.