aboutsummaryrefslogtreecommitdiff
path: root/Driver/CacheTokens.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-02-20 20:32:39 +0000
committerTed Kremenek <kremenek@apple.com>2009-02-20 20:32:39 +0000
commitf259f0fa621d24a44a78c61ca5d61944d892cba8 (patch)
tree0c6820041ade731331e6048bc6a71e31136e80cf /Driver/CacheTokens.cpp
parente6a90167aa29c126ce5d0398faedbbba582df7c3 (diff)
PTH generation: Clear the cleaning bit for literals (whose spellings are cached).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65148 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Driver/CacheTokens.cpp')
-rw-r--r--Driver/CacheTokens.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/Driver/CacheTokens.cpp b/Driver/CacheTokens.cpp
index d2921f0152..d36b0b4c88 100644
--- a/Driver/CacheTokens.cpp
+++ b/Driver/CacheTokens.cpp
@@ -430,8 +430,12 @@ uint32_t PTHWriter::ResolveID(const IdentifierInfo* II) {
}
void PTHWriter::EmitToken(const Token& T) {
+ // When writing out the token data for literals, clear the NeedsCleaning flag.
+ uint32_t CleaningMask = T.isLiteral() ? ~((uint32_t)Token::NeedsCleaning):~0U;
+
+ // Emit the token kind, flags, and length.
Emit32(((uint32_t) T.getKind()) |
- (((uint32_t) T.getFlags()) << 8) |
+ ((((uint32_t) T.getFlags()) & CleaningMask) << 8)|
(((uint32_t) T.getLength()) << 16));
// Literals (strings, numbers, characters) get cached spellings.
@@ -443,7 +447,7 @@ void PTHWriter::EmitToken(const Token& T) {
// Get the string entry.
llvm::StringMapEntry<OffsetOpt> *E =
- &CachedStrs.GetOrCreateValue(s, s+spelling.size());
+ &CachedStrs.GetOrCreateValue(s, s+spelling.size());
if (!E->getValue().hasOffset()) {
E->getValue().setOffset(CurStrOffset);