forked from OSchip/llvm-project
Remove unused tracking of owning module for MacroInfo objects.
llvm-svn: 302966
This commit is contained in:
parent
fc8c57cc5b
commit
3f6dd7a86c
|
@ -105,9 +105,6 @@ class MacroInfo {
|
||||||
/// \brief Must warn if the macro is unused at the end of translation unit.
|
/// \brief Must warn if the macro is unused at the end of translation unit.
|
||||||
bool IsWarnIfUnused : 1;
|
bool IsWarnIfUnused : 1;
|
||||||
|
|
||||||
/// \brief Whether this macro info was loaded from an AST file.
|
|
||||||
bool FromASTFile : 1;
|
|
||||||
|
|
||||||
/// \brief Whether this macro was used as header guard.
|
/// \brief Whether this macro was used as header guard.
|
||||||
bool UsedForHeaderGuard : 1;
|
bool UsedForHeaderGuard : 1;
|
||||||
|
|
||||||
|
@ -264,34 +261,16 @@ public:
|
||||||
IsDisabled = true;
|
IsDisabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \brief Determine whether this macro info came from an AST file (such as
|
|
||||||
/// a precompiled header or module) rather than having been parsed.
|
|
||||||
bool isFromASTFile() const { return FromASTFile; }
|
|
||||||
|
|
||||||
/// \brief Determine whether this macro was used for a header guard.
|
/// \brief Determine whether this macro was used for a header guard.
|
||||||
bool isUsedForHeaderGuard() const { return UsedForHeaderGuard; }
|
bool isUsedForHeaderGuard() const { return UsedForHeaderGuard; }
|
||||||
|
|
||||||
void setUsedForHeaderGuard(bool Val) { UsedForHeaderGuard = Val; }
|
void setUsedForHeaderGuard(bool Val) { UsedForHeaderGuard = Val; }
|
||||||
|
|
||||||
/// \brief Retrieve the global ID of the module that owns this particular
|
|
||||||
/// macro info.
|
|
||||||
unsigned getOwningModuleID() const {
|
|
||||||
if (isFromASTFile())
|
|
||||||
return *(const unsigned *)(this + 1);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void dump() const;
|
void dump() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned getDefinitionLengthSlow(const SourceManager &SM) const;
|
unsigned getDefinitionLengthSlow(const SourceManager &SM) const;
|
||||||
|
|
||||||
void setOwningModuleID(unsigned ID) {
|
|
||||||
assert(isFromASTFile());
|
|
||||||
*(unsigned *)(this + 1) = ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
friend class Preprocessor;
|
friend class Preprocessor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -644,14 +644,6 @@ class Preprocessor {
|
||||||
/// of that list.
|
/// of that list.
|
||||||
MacroInfoChain *MIChainHead;
|
MacroInfoChain *MIChainHead;
|
||||||
|
|
||||||
struct DeserializedMacroInfoChain {
|
|
||||||
MacroInfo MI;
|
|
||||||
unsigned OwningModuleID; // MUST be immediately after the MacroInfo object
|
|
||||||
// so it can be accessed by MacroInfo::getOwningModuleID().
|
|
||||||
DeserializedMacroInfoChain *Next;
|
|
||||||
};
|
|
||||||
DeserializedMacroInfoChain *DeserialMIChainHead;
|
|
||||||
|
|
||||||
void updateOutOfDateIdentifier(IdentifierInfo &II) const;
|
void updateOutOfDateIdentifier(IdentifierInfo &II) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -1669,10 +1661,6 @@ public:
|
||||||
/// \brief Allocate a new MacroInfo object with the provided SourceLocation.
|
/// \brief Allocate a new MacroInfo object with the provided SourceLocation.
|
||||||
MacroInfo *AllocateMacroInfo(SourceLocation L);
|
MacroInfo *AllocateMacroInfo(SourceLocation L);
|
||||||
|
|
||||||
/// \brief Allocate a new MacroInfo object loaded from an AST file.
|
|
||||||
MacroInfo *AllocateDeserializedMacroInfo(SourceLocation L,
|
|
||||||
unsigned SubModuleID);
|
|
||||||
|
|
||||||
/// \brief Turn the specified lexer token into a fully checked and spelled
|
/// \brief Turn the specified lexer token into a fully checked and spelled
|
||||||
/// filename, e.g. as an operand of \#include.
|
/// filename, e.g. as an operand of \#include.
|
||||||
///
|
///
|
||||||
|
@ -1764,9 +1752,6 @@ private:
|
||||||
/// macro name.
|
/// macro name.
|
||||||
void updateModuleMacroInfo(const IdentifierInfo *II, ModuleMacroInfo &Info);
|
void updateModuleMacroInfo(const IdentifierInfo *II, ModuleMacroInfo &Info);
|
||||||
|
|
||||||
/// \brief Allocate a new MacroInfo object.
|
|
||||||
MacroInfo *AllocateMacroInfo();
|
|
||||||
|
|
||||||
DefMacroDirective *AllocateDefMacroDirective(MacroInfo *MI,
|
DefMacroDirective *AllocateDefMacroDirective(MacroInfo *MI,
|
||||||
SourceLocation Loc);
|
SourceLocation Loc);
|
||||||
UndefMacroDirective *AllocateUndefMacroDirective(SourceLocation UndefLoc);
|
UndefMacroDirective *AllocateUndefMacroDirective(SourceLocation UndefLoc);
|
||||||
|
|
|
@ -29,7 +29,6 @@ MacroInfo::MacroInfo(SourceLocation DefLoc)
|
||||||
IsUsed(false),
|
IsUsed(false),
|
||||||
IsAllowRedefinitionsWithoutWarning(false),
|
IsAllowRedefinitionsWithoutWarning(false),
|
||||||
IsWarnIfUnused(false),
|
IsWarnIfUnused(false),
|
||||||
FromASTFile(false),
|
|
||||||
UsedForHeaderGuard(false) {
|
UsedForHeaderGuard(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,7 +136,6 @@ LLVM_DUMP_METHOD void MacroInfo::dump() const {
|
||||||
if (IsAllowRedefinitionsWithoutWarning)
|
if (IsAllowRedefinitionsWithoutWarning)
|
||||||
Out << " allow_redefinitions_without_warning";
|
Out << " allow_redefinitions_without_warning";
|
||||||
if (IsWarnIfUnused) Out << " warn_if_unused";
|
if (IsWarnIfUnused) Out << " warn_if_unused";
|
||||||
if (FromASTFile) Out << " imported";
|
|
||||||
if (UsedForHeaderGuard) Out << " header_guard";
|
if (UsedForHeaderGuard) Out << " header_guard";
|
||||||
|
|
||||||
Out << "\n #define <macro>";
|
Out << "\n #define <macro>";
|
||||||
|
|
|
@ -54,35 +54,12 @@ using namespace clang;
|
||||||
// Utility Methods for Preprocessor Directive Handling.
|
// Utility Methods for Preprocessor Directive Handling.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
MacroInfo *Preprocessor::AllocateMacroInfo() {
|
MacroInfo *Preprocessor::AllocateMacroInfo(SourceLocation L) {
|
||||||
MacroInfoChain *MIChain = BP.Allocate<MacroInfoChain>();
|
auto *MIChain = new (BP) MacroInfoChain{L, MIChainHead};
|
||||||
MIChain->Next = MIChainHead;
|
|
||||||
MIChainHead = MIChain;
|
MIChainHead = MIChain;
|
||||||
return &MIChain->MI;
|
return &MIChain->MI;
|
||||||
}
|
}
|
||||||
|
|
||||||
MacroInfo *Preprocessor::AllocateMacroInfo(SourceLocation L) {
|
|
||||||
MacroInfo *MI = AllocateMacroInfo();
|
|
||||||
new (MI) MacroInfo(L);
|
|
||||||
return MI;
|
|
||||||
}
|
|
||||||
|
|
||||||
MacroInfo *Preprocessor::AllocateDeserializedMacroInfo(SourceLocation L,
|
|
||||||
unsigned SubModuleID) {
|
|
||||||
static_assert(alignof(MacroInfo) >= sizeof(SubModuleID),
|
|
||||||
"alignment for MacroInfo is less than the ID");
|
|
||||||
DeserializedMacroInfoChain *MIChain =
|
|
||||||
BP.Allocate<DeserializedMacroInfoChain>();
|
|
||||||
MIChain->Next = DeserialMIChainHead;
|
|
||||||
DeserialMIChainHead = MIChain;
|
|
||||||
|
|
||||||
MacroInfo *MI = &MIChain->MI;
|
|
||||||
new (MI) MacroInfo(L);
|
|
||||||
MI->FromASTFile = true;
|
|
||||||
MI->setOwningModuleID(SubModuleID);
|
|
||||||
return MI;
|
|
||||||
}
|
|
||||||
|
|
||||||
DefMacroDirective *Preprocessor::AllocateDefMacroDirective(MacroInfo *MI,
|
DefMacroDirective *Preprocessor::AllocateDefMacroDirective(MacroInfo *MI,
|
||||||
SourceLocation Loc) {
|
SourceLocation Loc) {
|
||||||
return new (BP) DefMacroDirective(MI, Loc);
|
return new (BP) DefMacroDirective(MI, Loc);
|
||||||
|
|
|
@ -88,7 +88,7 @@ Preprocessor::Preprocessor(std::shared_ptr<PreprocessorOptions> PPOpts,
|
||||||
CurDirLookup(nullptr), CurLexerKind(CLK_Lexer),
|
CurDirLookup(nullptr), CurLexerKind(CLK_Lexer),
|
||||||
CurLexerSubmodule(nullptr), Callbacks(nullptr),
|
CurLexerSubmodule(nullptr), Callbacks(nullptr),
|
||||||
CurSubmoduleState(&NullSubmoduleState), MacroArgCache(nullptr),
|
CurSubmoduleState(&NullSubmoduleState), MacroArgCache(nullptr),
|
||||||
Record(nullptr), MIChainHead(nullptr), DeserialMIChainHead(nullptr) {
|
Record(nullptr), MIChainHead(nullptr) {
|
||||||
OwnsHeaderSearch = OwnsHeaders;
|
OwnsHeaderSearch = OwnsHeaders;
|
||||||
|
|
||||||
CounterValue = 0; // __COUNTER__ starts at 0.
|
CounterValue = 0; // __COUNTER__ starts at 0.
|
||||||
|
@ -169,11 +169,6 @@ Preprocessor::~Preprocessor() {
|
||||||
std::fill(TokenLexerCache, TokenLexerCache + NumCachedTokenLexers, nullptr);
|
std::fill(TokenLexerCache, TokenLexerCache + NumCachedTokenLexers, nullptr);
|
||||||
CurTokenLexer.reset();
|
CurTokenLexer.reset();
|
||||||
|
|
||||||
while (DeserializedMacroInfoChain *I = DeserialMIChainHead) {
|
|
||||||
DeserialMIChainHead = I->Next;
|
|
||||||
I->~DeserializedMacroInfoChain();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Free any cached MacroArgs.
|
// Free any cached MacroArgs.
|
||||||
for (MacroArgs *ArgList = MacroArgCache; ArgList;)
|
for (MacroArgs *ArgList = MacroArgCache; ArgList;)
|
||||||
ArgList = ArgList->deallocate();
|
ArgList = ArgList->deallocate();
|
||||||
|
|
|
@ -1534,9 +1534,8 @@ MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
|
||||||
return Macro;
|
return Macro;
|
||||||
|
|
||||||
unsigned NextIndex = 1; // Skip identifier ID.
|
unsigned NextIndex = 1; // Skip identifier ID.
|
||||||
SubmoduleID SubModID = getGlobalSubmoduleID(F, Record[NextIndex++]);
|
|
||||||
SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
|
SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
|
||||||
MacroInfo *MI = PP.AllocateDeserializedMacroInfo(Loc, SubModID);
|
MacroInfo *MI = PP.AllocateMacroInfo(Loc);
|
||||||
MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
|
MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
|
||||||
MI->setIsUsed(Record[NextIndex++]);
|
MI->setIsUsed(Record[NextIndex++]);
|
||||||
MI->setUsedForHeaderGuard(Record[NextIndex++]);
|
MI->setUsedForHeaderGuard(Record[NextIndex++]);
|
||||||
|
|
|
@ -2413,7 +2413,6 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) {
|
||||||
}
|
}
|
||||||
|
|
||||||
AddIdentifierRef(Name, Record);
|
AddIdentifierRef(Name, Record);
|
||||||
Record.push_back(inferSubmoduleIDFromLocation(MI->getDefinitionLoc()));
|
|
||||||
AddSourceLocation(MI->getDefinitionLoc(), Record);
|
AddSourceLocation(MI->getDefinitionLoc(), Record);
|
||||||
AddSourceLocation(MI->getDefinitionEndLoc(), Record);
|
AddSourceLocation(MI->getDefinitionEndLoc(), Record);
|
||||||
Record.push_back(MI->isUsed());
|
Record.push_back(MI->isUsed());
|
||||||
|
|
Loading…
Reference in New Issue