diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Driver/Driver.cpp | 9 | ||||
-rw-r--r-- | clang/lib/Frontend/PCHReader.cpp | 8 | ||||
-rw-r--r-- | clang/lib/Frontend/PCHWriter.cpp | 27 |
3 files changed, 30 insertions, 14 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index d88f1b35985..d6a046e9c32 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -22,6 +22,8 @@ #include "clang/Driver/ToolChain.h" #include "clang/Driver/Types.h" +#include "clang/Basic/Version.h" + #include "llvm/ADT/StringSet.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/raw_ostream.h" @@ -353,8 +355,8 @@ void Driver::PrintVersion(const Compilation &C) const { // FIXME: The following handlers should use a callback mechanism, we // don't know what the client would like to do. - // FIXME: Do not hardcode clang version. - llvm::errs() << "clang version 1.0 (" << vers << " " << revision << ")" << "\n"; + llvm::errs() << "clang version " CLANG_VERSION_STRING " (" + << vers << " " << revision << ")" << "\n"; const ToolChain &TC = C.getDefaultToolChain(); llvm::errs() << "Target: " << TC.getTripleString() << '\n'; @@ -366,8 +368,7 @@ bool Driver::HandleImmediateArgs(const Compilation &C) { // in practice. if (C.getArgs().hasArg(options::OPT_dumpversion)) { - // FIXME: Do not hardcode clang version. - llvm::outs() << "1.0\n"; + llvm::outs() << CLANG_VERSION_STRING "\n"; return false; } diff --git a/clang/lib/Frontend/PCHReader.cpp b/clang/lib/Frontend/PCHReader.cpp index 24e4e2b02fb..c1cb87bc160 100644 --- a/clang/lib/Frontend/PCHReader.cpp +++ b/clang/lib/Frontend/PCHReader.cpp @@ -928,7 +928,13 @@ PCHReader::ReadPCHBlock() { return IgnorePCH; break; - case pch::TARGET_TRIPLE: { + case pch::METADATA: { + if (Record[0] != pch::VERSION_MAJOR) { + Diag(Record[0] < pch::VERSION_MAJOR? diag::warn_pch_version_too_old + : diag::warn_pch_version_too_new); + return IgnorePCH; + } + std::string TargetTriple(BlobStart, BlobLen); if (TargetTriple != PP.getTargetInfo().getTargetTriple()) { Diag(diag::warn_pch_target_triple) diff --git a/clang/lib/Frontend/PCHWriter.cpp b/clang/lib/Frontend/PCHWriter.cpp index 817893448a7..6b58e250920 100644 --- a/clang/lib/Frontend/PCHWriter.cpp +++ b/clang/lib/Frontend/PCHWriter.cpp @@ -27,6 +27,7 @@ #include "clang/Basic/SourceManager.h" #include "clang/Basic/SourceManagerInternals.h" #include "clang/Basic/TargetInfo.h" +#include "clang/Basic/Version.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/APInt.h" #include "llvm/Bitcode/BitstreamWriter.h" @@ -341,7 +342,7 @@ void PCHWriter::WriteBlockInfoBlock() { RECORD(TYPE_OFFSET); RECORD(DECL_OFFSET); RECORD(LANGUAGE_OPTIONS); - RECORD(TARGET_TRIPLE); + RECORD(METADATA); RECORD(IDENTIFIER_OFFSET); RECORD(IDENTIFIER_TABLE); RECORD(EXTERNAL_DEFINITIONS); @@ -440,18 +441,26 @@ void PCHWriter::WriteBlockInfoBlock() { } -/// \brief Write the target triple (e.g., i686-apple-darwin9). -void PCHWriter::WriteTargetTriple(const TargetInfo &Target) { +/// \brief Write the PCH metadata (e.g., i686-apple-darwin9). +void PCHWriter::WriteMetadata(const TargetInfo &Target) { using namespace llvm; BitCodeAbbrev *Abbrev = new BitCodeAbbrev(); - Abbrev->Add(BitCodeAbbrevOp(pch::TARGET_TRIPLE)); - Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Triple name - unsigned TripleAbbrev = Stream.EmitAbbrev(Abbrev); + Abbrev->Add(BitCodeAbbrevOp(pch::METADATA)); + Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // PCH major + Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // PCH minor + Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Clang major + Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Clang minor + Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Target triple + unsigned AbbrevCode = Stream.EmitAbbrev(Abbrev); RecordData Record; - Record.push_back(pch::TARGET_TRIPLE); + Record.push_back(pch::METADATA); + Record.push_back(pch::VERSION_MAJOR); + Record.push_back(pch::VERSION_MINOR); + Record.push_back(CLANG_VERSION_MAJOR); + Record.push_back(CLANG_VERSION_MINOR); const char *Triple = Target.getTargetTriple(); - Stream.EmitRecordWithBlob(TripleAbbrev, Record, Triple, strlen(Triple)); + Stream.EmitRecordWithBlob(AbbrevCode, Record, Triple, strlen(Triple)); } /// \brief Write the LangOptions structure. @@ -1672,7 +1681,7 @@ void PCHWriter::WritePCH(Sema &SemaRef, MemorizeStatCalls *StatCalls) { // Write the remaining PCH contents. RecordData Record; Stream.EnterSubblock(pch::PCH_BLOCK_ID, 4); - WriteTargetTriple(Context.Target); + WriteMetadata(Context.Target); WriteLanguageOptions(Context.getLangOptions()); if (StatCalls) WriteStatCache(*StatCalls); |