diff options
-rw-r--r-- | include/clang/Serialization/ASTBitCodes.h | 11 | ||||
-rw-r--r-- | lib/Serialization/ASTReader.cpp | 40 | ||||
-rw-r--r-- | lib/Serialization/ASTWriter.cpp | 30 |
3 files changed, 46 insertions, 35 deletions
diff --git a/include/clang/Serialization/ASTBitCodes.h b/include/clang/Serialization/ASTBitCodes.h index b5171f529b..5bc1598bc6 100644 --- a/include/clang/Serialization/ASTBitCodes.h +++ b/include/clang/Serialization/ASTBitCodes.h @@ -242,20 +242,23 @@ namespace clang { /// actually important to check. LANGUAGE_OPTIONS = 3, + /// \brief Record code for the target options table. + TARGET_OPTIONS = 4, + /// \brief Record code for the original file that was used to /// generate the AST file. - ORIGINAL_FILE_NAME = 4, + ORIGINAL_FILE_NAME = 5, /// \brief Record code for the file ID of the original file used to /// generate the AST file. - ORIGINAL_FILE_ID = 5, + ORIGINAL_FILE_ID = 6, /// \brief The directory that the PCH was originally created in. - ORIGINAL_PCH_DIR = 6, + ORIGINAL_PCH_DIR = 7, /// \brief Record code for the version control branch and revision /// information of the compiler used to build this AST file. - VERSION_CONTROL_BRANCH_REVISION = 7 + VERSION_CONTROL_BRANCH_REVISION = 8 }; /// \brief Record types that occur within the AST block itself. diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index 5d2e8d6cfc..3d6d31d20e 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -1800,24 +1800,6 @@ ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, } RelocatablePCH = Record[4]; - if (Listener && &F == *ModuleMgr.begin()) { - unsigned Idx = 6; - TargetOptions TargetOpts; - TargetOpts.Triple = ReadString(Record, Idx); - TargetOpts.CPU = ReadString(Record, Idx); - TargetOpts.ABI = ReadString(Record, Idx); - TargetOpts.CXXABI = ReadString(Record, Idx); - TargetOpts.LinkerVersion = ReadString(Record, Idx); - for (unsigned N = Record[Idx++]; N; --N) { - TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx)); - } - for (unsigned N = Record[Idx++]; N; --N) { - TargetOpts.Features.push_back(ReadString(Record, Idx)); - } - - if (Listener->ReadTargetOptions(F, TargetOpts)) - return IgnorePCH; - } break; } @@ -1849,6 +1831,28 @@ ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, return IgnorePCH; break; + case TARGET_OPTIONS: { + if (Listener && &F == *ModuleMgr.begin()) { + unsigned Idx = 0; + TargetOptions TargetOpts; + TargetOpts.Triple = ReadString(Record, Idx); + TargetOpts.CPU = ReadString(Record, Idx); + TargetOpts.ABI = ReadString(Record, Idx); + TargetOpts.CXXABI = ReadString(Record, Idx); + TargetOpts.LinkerVersion = ReadString(Record, Idx); + for (unsigned N = Record[Idx++]; N; --N) { + TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx)); + } + for (unsigned N = Record[Idx++]; N; --N) { + TargetOpts.Features.push_back(ReadString(Record, Idx)); + } + + if (Listener->ReadTargetOptions(F, TargetOpts)) + return IgnorePCH; + } + break; + } + case ORIGINAL_FILE_NAME: // Only record from the primary AST file. if (&F == *ModuleMgr.begin()) { diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp index b6f302605b..13c88b85d3 100644 --- a/lib/Serialization/ASTWriter.cpp +++ b/lib/Serialization/ASTWriter.cpp @@ -994,19 +994,6 @@ void ASTWriter::WriteControlBlock(ASTContext &Context, StringRef isysroot, Record.push_back(CLANG_VERSION_MINOR); Record.push_back(!isysroot.empty()); Record.push_back(ASTHasCompilerErrors); - AddString(TargetOpts.Triple, Record); - AddString(TargetOpts.CPU, Record); - AddString(TargetOpts.ABI, Record); - AddString(TargetOpts.CXXABI, Record); - AddString(TargetOpts.LinkerVersion, Record); - Record.push_back(TargetOpts.FeaturesAsWritten.size()); - for (unsigned I = 0, N = TargetOpts.FeaturesAsWritten.size(); I != N; ++I) { - AddString(TargetOpts.FeaturesAsWritten[I], Record); - } - Record.push_back(TargetOpts.Features.size()); - for (unsigned I = 0, N = TargetOpts.Features.size(); I != N; ++I) { - AddString(TargetOpts.Features[I], Record); - } Stream.EmitRecord(METADATA, Record); // Imports @@ -1047,6 +1034,23 @@ void ASTWriter::WriteControlBlock(ASTContext &Context, StringRef isysroot, Record.append(LangOpts.CurrentModule.begin(), LangOpts.CurrentModule.end()); Stream.EmitRecord(LANGUAGE_OPTIONS, Record); + // Target options. + Record.clear(); + AddString(TargetOpts.Triple, Record); + AddString(TargetOpts.CPU, Record); + AddString(TargetOpts.ABI, Record); + AddString(TargetOpts.CXXABI, Record); + AddString(TargetOpts.LinkerVersion, Record); + Record.push_back(TargetOpts.FeaturesAsWritten.size()); + for (unsigned I = 0, N = TargetOpts.FeaturesAsWritten.size(); I != N; ++I) { + AddString(TargetOpts.FeaturesAsWritten[I], Record); + } + Record.push_back(TargetOpts.Features.size()); + for (unsigned I = 0, N = TargetOpts.Features.size(); I != N; ++I) { + AddString(TargetOpts.Features[I], Record); + } + Stream.EmitRecord(TARGET_OPTIONS, Record); + // Original file name and file ID SourceManager &SM = Context.getSourceManager(); if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) { |