clang
7.0.0
|
#include "clang/AST/Decl.h"
#include "Linkage.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTLambda.h"
#include "clang/AST/ASTMutationListener.h"
#include "clang/AST/CanonicalType.h"
#include "clang/AST/DeclBase.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclOpenMP.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/DeclarationName.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExternalASTSource.h"
#include "clang/AST/ODRHash.h"
#include "clang/AST/PrettyDeclStackTrace.h"
#include "clang/AST/PrettyPrinter.h"
#include "clang/AST/Redeclarable.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/TemplateBase.h"
#include "clang/AST/Type.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/Linkage.h"
#include "clang/Basic/Module.h"
#include "clang/Basic/PartialDiagnostic.h"
#include "clang/Basic/SanitizerBlacklist.h"
#include "clang/Basic/Sanitizers.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/Specifiers.h"
#include "clang/Basic/TargetCXXABI.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Basic/Visibility.h"
#include "clang/Frontend/FrontendDiagnostic.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/None.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Triple.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstring>
#include <memory>
#include <string>
#include <tuple>
#include <type_traits>
#include "clang/AST/DeclNodes.inc"
Go to the source code of this file.
Macros | |
#define | DECL(Type, Base) |
#define | ABSTRACT_DECL(DECL) |
Functions | |
static bool | hasExplicitVisibilityAlready (LVComputationKind computation) |
Does this computation kind permit us to consider additional visibility settings from attributes and the like? More... | |
static LVComputationKind | withExplicitVisibilityAlready (LVComputationKind Kind) |
Given an LVComputationKind, return one of the same type/value sort that records that it already has explicit visibility. More... | |
static Optional< Visibility > | getExplicitVisibility (const NamedDecl *D, LVComputationKind kind) |
static bool | usesTypeVisibility (const NamedDecl *D) |
Is the given declaration a "type" or a "value" for the purposes of visibility computation? More... | |
template<class T > | |
static std::enable_if<!std::is_base_of< RedeclarableTemplateDecl, T >::value, bool >::type | isExplicitMemberSpecialization (const T *D) |
Does the given declaration have member specialization information, and if so, is it an explicit specialization? More... | |
static bool | isExplicitMemberSpecialization (const RedeclarableTemplateDecl *D) |
For templates, this question is easier: a member template can't be explicitly instantiated, so there's a single bit indicating whether or not this is an explicit member specialization. More... | |
template<class T > | |
static Visibility | getVisibilityFromAttr (const T *attr) |
Given a visibility attribute, return the explicit visibility associated with it. More... | |
static Optional< Visibility > | getVisibilityOf (const NamedDecl *D, NamedDecl::ExplicitVisibilityKind kind) |
Return the explicit visibility of the given declaration. More... | |
static const Decl * | getOutermostFuncOrBlockContext (const Decl *D) |
static bool | shouldConsiderTemplateVisibility (const FunctionDecl *fn, const FunctionTemplateSpecializationInfo *specInfo) |
static bool | hasDirectVisibilityAttribute (const NamedDecl *D, LVComputationKind computation) |
Does the given declaration have a direct visibility attribute that would match the given rules? More... | |
static bool | shouldConsiderTemplateVisibility (const ClassTemplateSpecializationDecl *spec, LVComputationKind computation) |
Should we consider visibility associated with the template arguments and parameters of the given class template specialization? More... | |
static bool | shouldConsiderTemplateVisibility (const VarTemplateSpecializationDecl *spec, LVComputationKind computation) |
Should we consider visibility associated with the template arguments and parameters of the given variable template specialization? As usual, follow class template specialization logic up to initialization. More... | |
static bool | useInlineVisibilityHidden (const NamedDecl *D) |
template<typename T > | |
static bool | isFirstInExternCContext (T *D) |
static bool | isSingleLineLanguageLinkage (const Decl &D) |
static bool | isExportedFromModuleIntefaceUnit (const NamedDecl *D) |
static LinkageInfo | getInternalLinkageFor (const NamedDecl *D) |
static LinkageInfo | getExternalLinkageFor (const NamedDecl *D) |
static Optional< Visibility > | getExplicitVisibilityAux (const NamedDecl *ND, NamedDecl::ExplicitVisibilityKind kind, bool IsMostRecent) |
static const CXXRecordDecl * | getOutermostEnclosingLambda (const CXXRecordDecl *Record) |
template<typename T > | |
static bool | isRedeclarableImpl (Redeclarable< T > *) |
static bool | isRedeclarableImpl (...) |
static bool | isRedeclarable (Decl::Kind K) |
template<typename DeclT > | |
static SourceLocation | getTemplateOrInnerLocStart (const DeclT *decl) |
static bool | typeIsPostfix (QualType QT) |
template<typename T > | |
static LanguageLinkage | getDeclLanguageLinkage (const T &D) |
template<typename T > | |
static bool | isDeclExternC (const T &D) |
template<typename DeclT > | |
static DeclT * | getDefinitionOrSelf (DeclT *D) |
template<std::size_t Len> | |
static bool | isNamed (const NamedDecl *ND, const char(&Str)[Len]) |
static bool | redeclForcesDefMSVC (const FunctionDecl *Redecl) |
static bool | RedeclForcesDefC99 (const FunctionDecl *Redecl) |
static unsigned | getNumModuleIdentifiers (Module *Mod) |
Retrieve the number of module identifiers needed to name the given module. More... | |
#define ABSTRACT_DECL | ( | DECL | ) |
|
static |
Definition at line 1950 of file Decl.cpp.
References clang::NoLanguageLinkage.
Referenced by clang::VarDecl::getLanguageLinkage(), and clang::FunctionDecl::getLanguageLinkage().
|
static |
Definition at line 2347 of file Decl.cpp.
Referenced by clang::VarDecl::getTemplateInstantiationPattern(), clang::FunctionDecl::getTemplateInstantiationPattern(), and clang::EnumDecl::getTemplateInstantiationPattern().
|
static |
Definition at line 171 of file Decl.cpp.
References clang::NamedDecl::getExplicitVisibility(), clang::LVComputationKind::getExplicitVisibilityKind(), and clang::LVComputationKind::IgnoreExplicitVisibility.
Referenced by clang::NamedDecl::getExplicitVisibility(), and getExternalLinkageFor().
|
static |
Definition at line 1075 of file Decl.cpp.
References clang::CXXRecordDecl::getInstantiatedFromMemberClass(), clang::FunctionDecl::getInstantiatedFromMemberFunction(), clang::VarDecl::getInstantiatedFromStaticDataMember(), clang::NamedDecl::getMostRecentDecl(), clang::VarTemplateSpecializationDecl::getSpecializedTemplate(), clang::VarTemplateDecl::getTemplatedDecl(), clang::FunctionDecl::getTemplateSpecializationInfo(), getVisibilityOf(), and clang::None.
Referenced by clang::NamedDecl::getExplicitVisibility().
|
static |
Definition at line 597 of file Decl.cpp.
References clang::DefaultVisibility, clang::LinkageInfo::external(), clang::Decl::getAsFunction(), clang::Decl::getASTContext(), clang::Decl::getCanonicalDecl(), clang::Decl::getDeclContext(), getExplicitVisibility(), getInternalLinkageFor(), clang::LinkageInfo::getLinkage(), clang::Type::getLinkage(), clang::Decl::getOwningModule(), clang::DeclContext::getParent(), clang::Redeclarable< decl_type >::getPreviousDecl(), clang::DeclContext::getRedeclContext(), clang::VarTemplateSpecializationDecl::getSpecializedTemplate(), clang::ClassTemplateDecl::getTemplatedDecl(), clang::LinkageInfo::getVisibility(), hasDirectVisibilityAttribute(), hasExplicitVisibilityAlready(), clang::HiddenVisibility, isExplicitMemberSpecialization(), clang::VarTemplateSpecializationDecl::isExplicitSpecialization(), isExportedFromModuleIntefaceUnit(), clang::isExternalFormalLinkage(), clang::isExternallyVisible(), clang::DeclContext::isFileContext(), isFirstInExternCContext(), clang::Decl::isInAnonymousNamespace(), isSingleLineLanguageLinkage(), clang::LVComputationKind::isValueVisibility(), clang::LinkageInfo::isVisibilityExplicit(), clang::LinkageInfo::merge(), clang::LinkageInfo::mergeExternalVisibility(), clang::LinkageInfo::mergeMaybeWithVisibility(), clang::LinkageInfo::mergeVisibility(), clang::Module::ModuleInterfaceUnit, clang::ModuleLinkage, clang::LinkageInfo::none(), clang::SC_Extern, clang::SC_None, clang::SC_PrivateExtern, clang::SC_Static, clang::LinkageInfo::uniqueExternal(), useInlineVisibilityHidden(), and withExplicitVisibilityAlready().
Referenced by clang::LinkageComputer::computeLVForDecl().
|
static |
Definition at line 585 of file Decl.cpp.
References clang::DefaultVisibility, clang::Decl::getOwningModule(), clang::LinkageInfo::internal(), clang::Module::ModuleInterfaceUnit, and clang::ModuleInternalLinkage.
Referenced by clang::LinkageComputer::computeLVForDecl(), clang::NamedDecl::getExplicitVisibility(), getExternalLinkageFor(), and clang::LinkageComputer::getLVForDecl().
|
static |
Retrieve the number of module identifiers needed to name the given module.
Definition at line 4516 of file Decl.cpp.
References clang::Decl::Decl(), clang::Module::Parent, and clang::Result.
Referenced by clang::ImportDecl::getIdentifierLocs().
|
inlinestatic |
Definition at line 1274 of file Decl.cpp.
References clang::DeclContext::getParent(), and clang::CXXRecordDecl::isLambda().
Referenced by clang::LinkageComputer::computeLVForDecl().
Definition at line 302 of file Decl.cpp.
References clang::TemplateArgumentList::asArray(), clang::TemplateArgument::Declaration, clang::TemplateArgument::Expression, clang::Decl::getDeclContext(), clang::DeclContext::getDeclKind(), clang::DeclContext::getParent(), clang::TemplateArgument::Integral, clang::LinkageInfo::merge(), clang::TemplateArgument::Null, clang::TemplateArgument::NullPtr, clang::TemplateArgument::Pack, clang::TemplateArgument::Template, clang::TemplateArgument::TemplateExpansion, clang::TemplateArgument::Type, and usesTypeVisibility().
Referenced by clang::NamedDecl::getExplicitVisibility().
|
static |
Definition at line 1738 of file Decl.cpp.
Referenced by clang::DeclaratorDecl::getOuterLocStart(), and clang::TagDecl::getOuterLocStart().
|
static |
Given a visibility attribute, return the explicit visibility associated with it.
Definition at line 208 of file Decl.cpp.
References clang::Default, clang::DefaultVisibility, clang::HiddenVisibility, and clang::ProtectedVisibility.
Referenced by getVisibilityOf().
|
static |
Return the explicit visibility of the given declaration.
Definition at line 221 of file Decl.cpp.
References clang::DefaultVisibility, clang::Decl::getAttr(), clang::Type::getLinkage(), getVisibilityFromAttr(), clang::LVComputationKind::IgnoreAllVisibility, clang::Type::isDependentType(), clang::LinkageInfo::merge(), clang::None, P, and clang::NamedDecl::VisibilityForType.
Referenced by getExplicitVisibilityAux().
|
static |
Does the given declaration have a direct visibility attribute that would match the given rules?
Definition at line 408 of file Decl.cpp.
References clang::Decl::hasAttr(), clang::LVComputationKind::IgnoreAllVisibility, and clang::LVComputationKind::isTypeVisibility().
Referenced by getExternalLinkageFor(), and shouldConsiderTemplateVisibility().
|
static |
Does this computation kind permit us to consider additional visibility settings from attributes and the like?
Definition at line 159 of file Decl.cpp.
References clang::LVComputationKind::IgnoreExplicitVisibility.
Referenced by clang::NamedDecl::getExplicitVisibility(), getExternalLinkageFor(), and shouldConsiderTemplateVisibility().
|
static |
Definition at line 1978 of file Decl.cpp.
References clang::CLanguageLinkage, and clang::DeclContext::isRecord().
Referenced by clang::VarDecl::isExternC(), and clang::FunctionDecl::isExternC().
|
static |
Does the given declaration have member specialization information, and if so, is it an explicit specialization?
Definition at line 190 of file Decl.cpp.
Referenced by getExternalLinkageFor().
|
static |
For templates, this question is easier: a member template can't be explicitly instantiated, so there's a single bit indicating whether or not this is an explicit member specialization.
Definition at line 201 of file Decl.cpp.
References clang::RedeclarableTemplateDecl::isMemberSpecialization().
Definition at line 571 of file Decl.cpp.
References clang::Decl::getModuleOwnershipKind(), clang::Decl::getOwningModule(), clang::Module::ModuleInterfaceUnit, clang::Decl::ModulePrivate, clang::Decl::Unowned, clang::Decl::Visible, and clang::Decl::VisibleWhenImported.
Referenced by getExternalLinkageFor().
|
static |
Definition at line 559 of file Decl.cpp.
References clang::First.
Referenced by clang::NamedDecl::getExplicitVisibility(), and getExternalLinkageFor().
|
static |
Definition at line 2686 of file Decl.cpp.
References clang::NamedDecl::getIdentifier(), and clang::IdentifierInfo::isStr().
Referenced by clang::FunctionDecl::isMain(), and clang::FunctionDecl::isReplaceableGlobalAllocationFunction().
|
static |
Definition at line 1613 of file Decl.cpp.
Referenced by clang::NamedDecl::declarationReplaces().
|
static |
Definition at line 564 of file Decl.cpp.
References clang::Decl::getDeclContext().
Referenced by getExternalLinkageFor(), and clang::VarDecl::isThisDeclarationADefinition().
|
static |
Definition at line 3036 of file Decl.cpp.
References clang::Decl::getLexicalDeclContext(), clang::FunctionDecl::getStorageClass(), clang::Decl::isImplicit(), clang::FunctionDecl::isInlineSpecified(), clang::DeclContext::isTranslationUnit(), and clang::SC_Extern.
|
static |
Definition at line 3024 of file Decl.cpp.
References clang::Redeclarable< decl_type >::getPreviousDecl(), clang::FunctionDecl::getStorageClass(), and clang::SC_Extern.
|
static |
Definition at line 368 of file Decl.cpp.
References clang::FunctionTemplateSpecializationInfo::getTemplate(), clang::TemplateDecl::getTemplateParameters(), clang::Decl::hasAttr(), clang::FunctionTemplateSpecializationInfo::isExplicitInstantiationOrSpecialization(), clang::LinkageInfo::mergeMaybeWithVisibility(), and clang::FunctionTemplateSpecializationInfo::TemplateArguments.
Referenced by shouldConsiderTemplateVisibility().
|
static |
Should we consider visibility associated with the template arguments and parameters of the given class template specialization?
Definition at line 419 of file Decl.cpp.
References clang::ClassTemplateSpecializationDecl::getSpecializedTemplate(), clang::ClassTemplateSpecializationDecl::getTemplateArgs(), clang::TemplateDecl::getTemplateParameters(), hasDirectVisibilityAttribute(), hasExplicitVisibilityAlready(), clang::ClassTemplateSpecializationDecl::isExplicitInstantiationOrSpecialization(), clang::ClassTemplateSpecializationDecl::isExplicitSpecialization(), clang::LinkageInfo::mergeExternalVisibility(), clang::LinkageInfo::mergeMaybeWithVisibility(), clang::LinkageInfo::mergeVisibility(), and shouldConsiderTemplateVisibility().
|
static |
Should we consider visibility associated with the template arguments and parameters of the given variable template specialization? As usual, follow class template specialization logic up to initialization.
Definition at line 483 of file Decl.cpp.
References clang::VarTemplateSpecializationDecl::getSpecializedTemplate(), clang::VarTemplateSpecializationDecl::getTemplateArgs(), clang::TemplateDecl::getTemplateParameters(), hasDirectVisibilityAttribute(), hasExplicitVisibilityAlready(), clang::VarTemplateSpecializationDecl::isExplicitInstantiationOrSpecialization(), clang::VarTemplateSpecializationDecl::isExplicitSpecialization(), clang::LinkageInfo::mergeExternalVisibility(), clang::LinkageInfo::mergeMaybeWithVisibility(), clang::LinkageInfo::mergeVisibility(), and shouldConsiderTemplateVisibility().
Definition at line 1803 of file Decl.cpp.
References clang::Type::getTypeClass(), clang::QualType::getTypePtr(), and Paren.
Referenced by clang::DeclaratorDecl::getSourceRange(), and clang::TypedefDecl::getSourceRange().
Definition at line 531 of file Decl.cpp.
References clang::Decl::getASTContext(), clang::ASTContext::getLangOpts(), clang::VarDecl::getTemplateSpecializationKind(), clang::Decl::hasAttr(), clang::FunctionDecl::isInlined(), clang::TSK_ExplicitInstantiationDeclaration, clang::TSK_ExplicitInstantiationDefinition, and clang::TSK_Undeclared.
Referenced by getExternalLinkageFor().
Is the given declaration a "type" or a "value" for the purposes of visibility computation?
Definition at line 180 of file Decl.cpp.
Referenced by clang::LinkageComputer::getDeclLinkageAndVisibility(), and getOutermostFuncOrBlockContext().
|
static |
Given an LVComputationKind, return one of the same type/value sort that records that it already has explicit visibility.
Definition at line 166 of file Decl.cpp.
References clang::LVComputationKind::IgnoreExplicitVisibility.
Referenced by getExternalLinkageFor().