diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-10-17 14:55:37 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-10-17 14:55:37 +0000 |
commit | 71129d5e9e3a290df21ef8f3389c1b54b10f62cd (patch) | |
tree | 1a428c91cd676eb0e96231c15053feb9f1eeb5ec /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | fd979b1eaf0f88210625b565166952d6e41fe592 (diff) | |
download | bcm5719-llvm-71129d5e9e3a290df21ef8f3389c1b54b10f62cd.tar.gz bcm5719-llvm-71129d5e9e3a290df21ef8f3389c1b54b10f62cd.zip |
When building a module, use the macro definitions on the command line
as part of the hash rather than ignoring them. This means we'll end up
building more module variants (overall), but it allows configuration
macros such as NDEBUG to work so long as they're specified via command
line. More to come in this space.
llvm-svn: 142187
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 53581061448..1debf3b3531 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -2026,6 +2026,23 @@ std::string CompilerInvocation::getModuleHash() const { Signature.add(getPreprocessorOpts().UsePredefines, 1); Signature.add(getPreprocessorOpts().DetailedRecord, 1); + // Hash the preprocessor defines. + // FIXME: This is terrible. Use an MD5 sum of the preprocessor defines. + std::vector<StringRef> MacroDefs; + for (std::vector<std::pair<std::string, bool/*isUndef*/> >::const_iterator + I = getPreprocessorOpts().Macros.begin(), + IEnd = getPreprocessorOpts().Macros.end(); + I != IEnd; ++I) { + if (!I->second) + MacroDefs.push_back(I->first); + } + llvm::array_pod_sort(MacroDefs.begin(), MacroDefs.end()); + + unsigned PPHashResult = 0; + for (unsigned I = 0, N = MacroDefs.size(); I != N; ++I) + PPHashResult = llvm::HashString(MacroDefs[I], PPHashResult); + Signature.add(PPHashResult, 32); + // We've generated the signature. Treat it as one large APInt that we'll // encode in base-36 and return. Signature.flush(); |