Skip to content

Commit 94efa55

Browse files
committed
Move ThisDeclarationWasADefinition to separate map
1 parent d7234be commit 94efa55

File tree

3 files changed

+21
-25
lines changed

3 files changed

+21
-25
lines changed

clang/include/clang/Serialization/ASTReader.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,19 +1390,21 @@ class ASTReader
13901390
/// predefines buffer may contain additional definitions.
13911391
std::string SuggestedPredefines;
13921392

1393-
struct DefinitionSourceBits {
1394-
ExtKind HasExternalDefinitions : 2;
1393+
llvm::DenseMap<const Decl *, bool> DefinitionSource;
13951394

1395+
/// The set of extra flags about declarations that we have read from
1396+
/// the module file.
1397+
struct ExternalDeclarationBits {
13961398
/// Indicates if given function declaration was a definition but its body
13971399
/// was removed due to declaration merging.
13981400
bool ThisDeclarationWasADefinition : 1;
13991401

1400-
DefinitionSourceBits()
1401-
: HasExternalDefinitions(EK_ReplyHazy),
1402-
ThisDeclarationWasADefinition(false) {}
1402+
ExternalDeclarationBits() : ThisDeclarationWasADefinition(false) {}
14031403
};
14041404

1405-
llvm::DenseMap<const Decl *, DefinitionSourceBits> DefinitionSource;
1405+
/// A mapping from declarations to extra bits of information about this decl.
1406+
llvm::DenseMap<const Decl *, ExternalDeclarationBits>
1407+
ExternalDeclarationBitsMap;
14061408

14071409
bool shouldDisableValidationForFile(const serialization::ModuleFile &M) const;
14081410

clang/lib/Serialization/ASTReader.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9657,12 +9657,12 @@ ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
96579657
auto I = DefinitionSource.find(FD);
96589658
if (I == DefinitionSource.end())
96599659
return EK_ReplyHazy;
9660-
return I->second.HasExternalDefinitions;
9660+
return I->second ? EK_Never : EK_Always;
96619661
}
96629662

96639663
bool ASTReader::wasThisDeclarationADefinition(const FunctionDecl *FD) {
9664-
auto I = DefinitionSource.find(FD);
9665-
if (I == DefinitionSource.end())
9664+
auto I = ExternalDeclarationBitsMap.find(FD);
9665+
if (I == ExternalDeclarationBitsMap.end())
96669666
return false;
96679667
return I->second.ThisDeclarationWasADefinition;
96689668
}

clang/lib/Serialization/ASTReaderDecl.cpp

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -512,11 +512,9 @@ uint64_t ASTDeclReader::GetCurrentCursorOffset() {
512512

513513
void ASTDeclReader::ReadFunctionDefinition(FunctionDecl *FD) {
514514
if (Record.readInt()) {
515-
Reader.DefinitionSource[FD].HasExternalDefinitions =
516-
(Loc.F->Kind == ModuleKind::MK_MainFile ||
517-
Reader.getContext().getLangOpts().BuildingPCHWithObjectFile)
518-
? ExternalASTSource::EK_Never
519-
: ExternalASTSource::EK_Always;
515+
Reader.DefinitionSource[FD] =
516+
Loc.F->Kind == ModuleKind::MK_MainFile ||
517+
Reader.getContext().getLangOpts().BuildingPCHWithObjectFile;
520518
}
521519
if (auto *CD = dyn_cast<CXXConstructorDecl>(FD)) {
522520
CD->setNumCtorInitializers(Record.readInt());
@@ -527,7 +525,7 @@ void ASTDeclReader::ReadFunctionDefinition(FunctionDecl *FD) {
527525
Reader.PendingBodies[FD] = GetCurrentCursorOffset();
528526
// For now remember ThisDeclarationWasADefinition only for friend functions.
529527
if (FD->getFriendObjectKind())
530-
Reader.DefinitionSource[FD].ThisDeclarationWasADefinition = true;
528+
Reader.ExternalDeclarationBitsMap[FD].ThisDeclarationWasADefinition = true;
531529
}
532530

533531
void ASTDeclReader::Visit(Decl *D) {
@@ -1657,11 +1655,9 @@ RedeclarableResult ASTDeclReader::VisitVarDeclImpl(VarDecl *VD) {
16571655
VD->setLocalExternDecl();
16581656

16591657
if (DefGeneratedInModule) {
1660-
Reader.DefinitionSource[VD].HasExternalDefinitions =
1661-
(Loc.F->Kind == ModuleKind::MK_MainFile ||
1662-
Reader.getContext().getLangOpts().BuildingPCHWithObjectFile)
1663-
? ExternalASTSource::EK_Never
1664-
: ExternalASTSource::EK_Always;
1658+
Reader.DefinitionSource[VD] =
1659+
Loc.F->Kind == ModuleKind::MK_MainFile ||
1660+
Reader.getContext().getLangOpts().BuildingPCHWithObjectFile;
16651661
}
16661662

16671663
if (VD->hasAttr<BlocksAttr>()) {
@@ -2003,11 +1999,9 @@ void ASTDeclReader::ReadCXXDefinitionData(
20031999
Data.HasODRHash = true;
20042000

20052001
if (Record.readInt()) {
2006-
Reader.DefinitionSource[D].HasExternalDefinitions =
2007-
(Loc.F->Kind == ModuleKind::MK_MainFile ||
2008-
Reader.getContext().getLangOpts().BuildingPCHWithObjectFile)
2009-
? ExternalASTSource::EK_Never
2010-
: ExternalASTSource::EK_Always;
2002+
Reader.DefinitionSource[D] =
2003+
Loc.F->Kind == ModuleKind::MK_MainFile ||
2004+
Reader.getContext().getLangOpts().BuildingPCHWithObjectFile;
20112005
}
20122006

20132007
Record.readUnresolvedSet(Data.Conversions);

0 commit comments

Comments
 (0)