diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-03-22 21:12:51 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-03-22 21:12:51 +0000 |
| commit | 4f32da1ef5a720426c22a5aa4f17deea2ad85de4 (patch) | |
| tree | e8688446798855cbf8286787e19ccb25726771e5 /clang/lib | |
| parent | ad900f9c85ba0459db2e202f82d4fab76372c4a2 (diff) | |
| download | bcm5719-llvm-4f32da1ef5a720426c22a5aa4f17deea2ad85de4.tar.gz bcm5719-llvm-4f32da1ef5a720426c22a5aa4f17deea2ad85de4.zip | |
[modules] When a MacroInfo object is deserialized, allocate and store its submodule ID.
llvm-svn: 177760
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Lex/MacroInfo.cpp | 3 | ||||
| -rw-r--r-- | clang/lib/Lex/PPDirectives.cpp | 13 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 2 |
3 files changed, 16 insertions, 2 deletions
diff --git a/clang/lib/Lex/MacroInfo.cpp b/clang/lib/Lex/MacroInfo.cpp index 3d4ffb40c0f..213e71132b8 100644 --- a/clang/lib/Lex/MacroInfo.cpp +++ b/clang/lib/Lex/MacroInfo.cpp @@ -28,7 +28,8 @@ MacroInfo::MacroInfo(SourceLocation DefLoc) IsDisabled(false), IsUsed(false), IsAllowRedefinitionsWithoutWarning(false), - IsWarnIfUnused(false) { + IsWarnIfUnused(false), + FromASTFile(false) { } unsigned MacroInfo::getDefinitionLengthSlow(SourceManager &SM) const { diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index e19eb31335a..163dbf413e6 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -57,6 +57,19 @@ MacroInfo *Preprocessor::AllocateMacroInfo(SourceLocation L) { return MI; } +MacroInfo *Preprocessor::AllocateDeserializedMacroInfo(SourceLocation L, + unsigned SubModuleID) { + LLVM_STATIC_ASSERT(llvm::AlignOf<MacroInfo>::Alignment >= sizeof(SubModuleID), + "alignment for MacroInfo is less than the ID"); + MacroInfo *MI = + (MacroInfo*)BP.Allocate(sizeof(MacroInfo) + sizeof(SubModuleID), + llvm::AlignOf<MacroInfo>::Alignment); + new (MI) MacroInfo(L); + MI->FromASTFile = true; + MI->setOwningModuleID(SubModuleID); + return MI; +} + MacroDirective *Preprocessor::AllocateMacroDirective(MacroInfo *MI, SourceLocation Loc, bool isImported) { diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 0f674530bc6..73cd72f44c9 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -1151,7 +1151,7 @@ void ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset, SubmoduleID GlobalSubmoduleID = getGlobalSubmoduleID(F, Record[2]); unsigned NextIndex = 3; SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex); - MacroInfo *MI = PP.AllocateMacroInfo(Loc); + MacroInfo *MI = PP.AllocateDeserializedMacroInfo(Loc, GlobalSubmoduleID); // FIXME: Location should be import location in case of module. MacroDirective *MD = PP.AllocateMacroDirective(MI, Loc, /*isImported=*/true); |

