Remove unused tracking of owning module for MacroInfo objects.

llvm-svn: 302966
This commit is contained in:
Richard Smith 2017-05-12 23:40:52 +00:00
parent fc8c57cc5b
commit 3f6dd7a86c
7 changed files with 4 additions and 72 deletions

View File

@ -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;
}; };

View File

@ -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);

View File

@ -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>";

View File

@ -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);

View File

@ -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();

View File

@ -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++]);

View File

@ -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());