clang 20.0.0git
Classes | Namespaces | Macros | Functions
ASTReaderDecl.cpp File Reference
#include "ASTCommon.h"
#include "ASTReaderInternals.h"
#include "clang/AST/ASTConcept.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTStructuralEquivalence.h"
#include "clang/AST/Attr.h"
#include "clang/AST/AttrIterator.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclBase.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclFriend.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclOpenMP.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/DeclVisitor.h"
#include "clang/AST/DeclarationName.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExternalASTSource.h"
#include "clang/AST/LambdaCapture.h"
#include "clang/AST/NestedNameSpecifier.h"
#include "clang/AST/OpenMPClause.h"
#include "clang/AST/Redeclarable.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/TemplateBase.h"
#include "clang/AST/Type.h"
#include "clang/AST/UnresolvedSet.h"
#include "clang/Basic/AttrKinds.h"
#include "clang/Basic/DiagnosticSema.h"
#include "clang/Basic/ExceptionSpecificationType.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/Lambda.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/Linkage.h"
#include "clang/Basic/Module.h"
#include "clang/Basic/PragmaKinds.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/Specifiers.h"
#include "clang/Basic/Stack.h"
#include "clang/Sema/IdentifierResolver.h"
#include "clang/Serialization/ASTBitCodes.h"
#include "clang/Serialization/ASTRecordReader.h"
#include "clang/Serialization/ContinuousRangeMap.h"
#include "clang/Serialization/ModuleFile.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/iterator_range.h"
#include "llvm/Bitstream/BitstreamReader.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/SaveAndRestore.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <cstring>
#include <string>
#include <utility>
#include "clang/AST/CXXRecordDeclDefinitionBits.def"
#include "clang/Serialization/AttrPCHRead.inc"
#include "clang/AST/DeclNodes.inc"

Go to the source code of this file.

Classes

class  clang::ASTDeclMerger
 
class  clang::ASTDeclReader
 

Namespaces

namespace  clang
 The JSON file list parser is used to communicate input to InstallAPI.
 

Macros

#define FIELD(Name, Width, Merge)
 
#define FIELD(Name, Width, Merge)   Merge(Name)
 
#define MERGE_OR(Field)   DD.Field |= MergeDD.Field;
 
#define NO_MERGE(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.
 
template<typename T >
static T assert_cast (...)
 
static bool allowODRLikeMergeInC (NamedDecl *ND)
 ODR-like semantics for C/ObjC allow us to merge tag types and a structural check in Sema guarantees the types can be merged (see C11 6.2.7/1 or C89 6.1.2.6/1).
 
static NamedDeclgetDeclForMerging (NamedDecl *Found, bool IsTypedefNameForLinkage)
 Find the declaration that should be merged into, given the declaration found by name lookup.
 
static bool clang::isUndeducedReturnType (QualType T)
 
template<typename ParmDecl >
static bool inheritDefaultTemplateArgument (ASTContext &Context, ParmDecl *From, Decl *ToD)
 Inherit the default template argument from From to To.
 
static void inheritDefaultTemplateArguments (ASTContext &Context, TemplateDecl *From, TemplateDecl *To)
 
static void checkMultipleDefinitionInNamedModules (ASTReader &Reader, Decl *D, Decl *Previous)
 
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));
const Decl * D

◆ DECL [2/4]

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

◆ DECL [3/4]

#define DECL (   TYPE,
  BASE 
)
Value:
case Decl::TYPE: \
attachLatestDeclImpl(cast<TYPE##Decl>(D), Latest); \
break;

◆ DECL [4/4]

#define DECL (   TYPE,
  BASE 
)
Value:
case Decl::TYPE: \
ASTDeclReader::markIncompleteDeclChainImpl(cast<TYPE##Decl>(D)); \
break;

◆ FIELD [1/2]

#define FIELD (   Name,
  Width,
  Merge 
)
Value:
if (!CXXRecordDeclBits.canGetNextNBits(Width)) \
CXXRecordDeclBits.updateValue(Record.readInt()); \
Data.Name = CXXRecordDeclBits.getNextBits(Width);
llvm::MachO::Record Record
Definition: MachO.h:31
const char * Data

◆ FIELD [2/2]

#define FIELD (   Name,
  Width,
  Merge 
)    Merge(Name)

◆ MERGE_OR

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

◆ NO_MERGE

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

Function Documentation

◆ allowODRLikeMergeInC()

static bool allowODRLikeMergeInC ( NamedDecl ND)
static

ODR-like semantics for C/ObjC allow us to merge tag types and a structural check in Sema guarantees the types can be merged (see C11 6.2.7/1 or C89 6.1.2.6/1).

Although most merging is done in Sema, we need to guarantee that some types are mergeable during deserialization, otherwise name lookup fails. This is the case for EnumConstantDecl.

Definition at line 2977 of file ASTReaderDecl.cpp.

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

◆ assert_cast() [1/2]

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

Definition at line 2895 of file ASTReaderDecl.cpp.

◆ assert_cast() [2/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 2894 of file ASTReaderDecl.cpp.

◆ checkMultipleDefinitionInNamedModules()

static void checkMultipleDefinitionInNamedModules ( ASTReader Reader,
Decl D,
Decl Previous 
)
static

◆ forAllLaterRedecls()

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

◆ 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 3327 of file ASTReaderDecl.cpp.

References clang::Found.

◆ 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 3660 of file ASTReaderDecl.cpp.

Referenced by inheritDefaultTemplateArguments().

◆ inheritDefaultTemplateArguments()

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

◆ merged_redecls()

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

Definition at line 522 of file ASTReaderDecl.cpp.

References D.

Referenced by clang::ASTDeclReader::VisitEnumDecl(), and clang::ASTDeclReader::VisitRecordDecl().