clang  6.0.0svn
Classes | Namespaces | Macros | Functions
ASTReaderDecl.cpp File Reference
#include "ASTCommon.h"
#include "ASTReaderInternals.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclGroup.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/DeclVisitor.h"
#include "clang/AST/Expr.h"
#include "clang/Sema/IdentifierResolver.h"
#include "clang/Sema/SemaDiagnostic.h"
#include "clang/Serialization/ASTReader.h"
#include "llvm/Support/SaveAndRestore.h"
#include "clang/Serialization/AttrPCHRead.inc"
#include "clang/AST/DeclNodes.inc"
Include dependency graph for ASTReaderDecl.cpp:

Go to the source code of this file.

Classes

class  clang::ASTDeclReader
 

Namespaces

 clang
 Dataflow Directional Tag Classes.
 

Macros

#define OR_FIELD(Field)   DD.Field |= MergeDD.Field;
 
#define MATCH_FIELD(Field)
 
#define ABSTRACT_DECL(TYPE)
 
#define DECL(TYPE, BASE)
 
#define ABSTRACT_DECL(TYPE)
 
#define DECL(TYPE, BASE)
 
#define ABSTRACT_DECL(TYPE)
 
#define DECL(TYPE, BASE)
 
#define ABSTRACT_DECL(TYPE)
 
#define DECL(TYPE, BASE)
 

Functions

template<typename DeclT >
static llvm::iterator_range< MergedRedeclIterator< DeclT > > merged_redecls (DeclT *D)
 
template<typename T >
static T assert_cast (T t)
 "Cast" to type T, asserting if we don't have an implicit conversion. More...
 
template<typename T >
static T assert_cast (...)
 
static bool isConsumerInterestedIn (ASTContext &Ctx, Decl *D, bool HasBody)
 Determine whether the consumer will be interested in seeing this declaration (via HandleTopLevelDecl). More...
 
static bool isSameTemplateParameterList (const TemplateParameterList *X, const TemplateParameterList *Y)
 Determine whether two template parameter lists are similar enough that they may be used in declarations of the same template. More...
 
static bool isSameTemplateParameter (const NamedDecl *X, const NamedDecl *Y)
 Determine whether two template parameters are similar enough that they may be used in declarations of the same template. More...
 
static NamespaceDeclgetNamespace (const NestedNameSpecifier *X)
 
static bool isSameQualifier (const NestedNameSpecifier *X, const NestedNameSpecifier *Y)
 
static bool hasSameOverloadableAttrs (const FunctionDecl *A, const FunctionDecl *B)
 Determine whether the attributes we can overload on are identical for A and B. More...
 
static bool isSameEntity (NamedDecl *X, NamedDecl *Y)
 Determine whether the two declarations refer to the same entity. More...
 
static NamedDeclgetDeclForMerging (NamedDecl *Found, bool IsTypedefNameForLinkage)
 Find the declaration that should be merged into, given the declaration found by name lookup. More...
 
template<typename ParmDecl >
static bool inheritDefaultTemplateArgument (ASTContext &Context, ParmDecl *From, Decl *ToD)
 Inherit the default template argument from From to To. More...
 
static void inheritDefaultTemplateArguments (ASTContext &Context, TemplateDecl *From, TemplateDecl *To)
 
template<typename DeclT , typename Fn >
static void forAllLaterRedecls (DeclT *D, Fn F)
 

Macro Definition Documentation

◆ ABSTRACT_DECL [1/4]

#define ABSTRACT_DECL (   TYPE)

◆ ABSTRACT_DECL [2/4]

#define ABSTRACT_DECL (   TYPE)

◆ ABSTRACT_DECL [3/4]

#define ABSTRACT_DECL (   TYPE)

◆ ABSTRACT_DECL [4/4]

#define ABSTRACT_DECL (   TYPE)

◆ DECL [1/4]

#define DECL (   TYPE,
  BASE 
)
Value:
case Decl::TYPE: \
return getMostRecentDeclImpl(cast<TYPE##Decl>(D));
#define TYPE(DERIVED, BASE)
Definition: ASTFwd.h:27

◆ DECL [2/4]

#define DECL (   TYPE,
  BASE 
)
Value:
case Decl::TYPE: \
attachPreviousDeclImpl(Reader, cast<TYPE##Decl>(D), Previous, Canon); \
break;
#define TYPE(DERIVED, BASE)
Definition: ASTFwd.h:27
StateNode * Previous

◆ DECL [3/4]

#define DECL (   TYPE,
  BASE 
)
Value:
case Decl::TYPE: \
attachLatestDeclImpl(cast<TYPE##Decl>(D), Latest); \
break;
#define TYPE(DERIVED, BASE)
Definition: ASTFwd.h:27

◆ DECL [4/4]

#define DECL (   TYPE,
  BASE 
)
Value:
case Decl::TYPE: \
ASTDeclReader::markIncompleteDeclChainImpl(cast<TYPE##Decl>(D)); \
break;
#define TYPE(DERIVED, BASE)
Definition: ASTFwd.h:27

◆ MATCH_FIELD

#define MATCH_FIELD (   Field)
Value:
DetectedOdrViolation |= DD.Field != MergeDD.Field; \
OR_FIELD(Field)

◆ OR_FIELD

#define OR_FIELD (   Field)    DD.Field |= MergeDD.Field;

Function Documentation

◆ assert_cast() [1/2]

template<typename T >
static T assert_cast ( t)
static

"Cast" to type T, asserting if we don't have an implicit conversion.

We use this to put code in a template that will only be valid for certain instantiations.

Definition at line 2398 of file ASTReaderDecl.cpp.

◆ assert_cast() [2/2]

template<typename T >
static T assert_cast (   ...)
static

Definition at line 2399 of file ASTReaderDecl.cpp.

◆ forAllLaterRedecls()

template<typename DeclT , typename Fn >
static void forAllLaterRedecls ( DeclT *  D,
Fn  F 
)
static

Definition at line 3929 of file ASTReaderDecl.cpp.

Referenced by clang::ASTDeclReader::UpdateDecl().

◆ getDeclForMerging()

static NamedDecl* getDeclForMerging ( NamedDecl Found,
bool  IsTypedefNameForLinkage 
)
static

Find the declaration that should be merged into, given the declaration found by name lookup.

If we're merging an anonymous declaration within a typedef, we need a matching typedef, and we merge with the type inside it.

Definition at line 3002 of file ASTReaderDecl.cpp.

References clang::Decl::isFromASTFile(), clang::serialization::numberAnonymousDeclsWithin(), and Previous.

◆ getNamespace()

static NamespaceDecl* getNamespace ( const NestedNameSpecifier X)
static

◆ hasSameOverloadableAttrs()

static bool hasSameOverloadableAttrs ( const FunctionDecl A,
const FunctionDecl B 
)
static

Determine whether the attributes we can overload on are identical for A and B.

Will ignore any overloadable attrs represented in the type of A and B.

Definition at line 2723 of file ASTReaderDecl.cpp.

References clang::Decl::specific_attrs().

Referenced by isSameEntity().

◆ inheritDefaultTemplateArgument()

template<typename ParmDecl >
static bool inheritDefaultTemplateArgument ( ASTContext Context,
ParmDecl *  From,
Decl ToD 
)
static

Inherit the default template argument from From to To.

Returns false if there is no default template for From.

Definition at line 3264 of file ASTReaderDecl.cpp.

◆ inheritDefaultTemplateArguments()

static void inheritDefaultTemplateArguments ( ASTContext Context,
TemplateDecl From,
TemplateDecl To 
)
static

Definition at line 3273 of file ASTReaderDecl.cpp.

Referenced by clang::ASTDeclReader::attachPreviousDecl().

◆ isConsumerInterestedIn()

static bool isConsumerInterestedIn ( ASTContext Ctx,
Decl D,
bool  HasBody 
)
static

Determine whether the consumer will be interested in seeing this declaration (via HandleTopLevelDecl).

This routine should return true for anything that might affect code generation, e.g., inline function definitions, Objective-C declarations with metadata, etc.

Definition at line 2573 of file ASTReaderDecl.cpp.

References clang::ASTContext::DeclMustBeEmitted(), clang::VarDecl::Definition, clang::ExternalASTSource::EK_Never, clang::Decl::getASTContext(), clang::Decl::getDeclContext(), clang::ASTContext::getExternalSource(), clang::Decl::getImportedOwningModule(), clang::DeclContext::isFunctionOrMethod(), and clang::Module::ModuleMapModule.

◆ isSameEntity()

static bool isSameEntity ( NamedDecl X,
NamedDecl Y 
)
static

◆ isSameQualifier()

static bool isSameQualifier ( const NestedNameSpecifier X,
const NestedNameSpecifier Y 
)
static

◆ isSameTemplateParameter()

static bool isSameTemplateParameter ( const NamedDecl X,
const NamedDecl Y 
)
static

◆ isSameTemplateParameterList()

static bool isSameTemplateParameterList ( const TemplateParameterList X,
const TemplateParameterList Y 
)
static

Determine whether two template parameter lists are similar enough that they may be used in declarations of the same template.

Definition at line 2709 of file ASTReaderDecl.cpp.

References clang::TemplateParameterList::size().

Referenced by isSameEntity(), and isSameTemplateParameter().

◆ merged_redecls()

template<typename DeclT >
static llvm::iterator_range<MergedRedeclIterator<DeclT> > merged_redecls ( DeclT *  D)
static