#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/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.
|
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 bool | isConsumerInterestedIn (ASTContext &Ctx, Decl *D, bool HasBody) |
| Determine whether the consumer will be interested in seeing this declaration (via HandleTopLevelDecl).
|
|
static NamedDecl * | getDeclForMerging (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) |
|
template<typename DeclT , typename Fn > |
static void | forAllLaterRedecls (DeclT *D, Fn F) |
|
◆ 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));
◆ DECL [2/4]
#define DECL |
( |
|
TYPE, |
|
|
|
BASE |
|
) |
| |
Value: case Decl::TYPE: \
attachPreviousDeclImpl(Reader, cast<TYPE##Decl>(D),
Previous, Canon); \
break;
◆ 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);
◆ 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)
◆ allowODRLikeMergeInC()
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 2967 of file ASTReaderDecl.cpp.
Referenced by clang::ASTDeclReader::mergeMergeable().
◆ assert_cast() [1/2]
template<typename T >
static T assert_cast |
( |
|
... | ) |
|
|
static |
◆ assert_cast() [2/2]
template<typename T >
static T assert_cast |
( |
T |
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 2879 of file ASTReaderDecl.cpp.
◆ forAllLaterRedecls()
template<typename DeclT , typename Fn >
static void forAllLaterRedecls |
( |
DeclT * |
D, |
|
|
Fn |
F |
|
) |
| |
|
static |
◆ getDeclForMerging()
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 3319 of file ASTReaderDecl.cpp.
References clang::Decl::isFromASTFile().
◆ inheritDefaultTemplateArgument()
template<typename ParmDecl >
static bool inheritDefaultTemplateArgument |
( |
ASTContext & |
Context, |
|
|
ParmDecl * |
From, |
|
|
Decl * |
ToD |
|
) |
| |
|
static |
◆ inheritDefaultTemplateArguments()
◆ isConsumerInterestedIn()
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 3176 of file ASTReaderDecl.cpp.
References clang::ASTContext::DeclMustBeEmitted(), clang::VarDecl::Definition, clang::ExternalASTSource::EK_Never, clang::Func, clang::Decl::getASTContext(), clang::Decl::getDeclContext(), clang::ASTContext::getExternalSource(), clang::Decl::getImportedOwningModule(), clang::isa(), clang::DeclContext::isFunctionOrMethod(), clang::serialization::isPartOfPerModuleInitializer(), and clang::Module::ModuleMapModule.
◆ merged_redecls()
template<typename DeclT >
static llvm::iterator_range< MergedRedeclIterator< DeclT > > merged_redecls |
( |
DeclT * |
D | ) |
|
|
static |