summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/Driver.cpp9
-rw-r--r--clang/lib/Frontend/PCHReader.cpp8
-rw-r--r--clang/lib/Frontend/PCHWriter.cpp27
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);
OpenPOWER on IntegriCloud