]> granicus.if.org Git - clang/commitdiff
Shadow CurPtr with a local variable in ReadToken.
authorTed Kremenek <kremenek@apple.com>
Wed, 17 Dec 2008 18:38:19 +0000 (18:38 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 17 Dec 2008 18:38:19 +0000 (18:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61145 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/PTHLexer.cpp

index 49c7078b757f31c5cce0cf2d1974fffff106b711..2ec01b27ebd9a48400f2a9fe0a838405836f1093 100644 (file)
@@ -271,21 +271,27 @@ void PTHLexer::ReadToken(Token& T) {
   // FIXME: Setting the flags directly should obviate this step.
   T.startToken();
   
+  // Shadow CurPtr into an automatic variable so that Read8 doesn't load and
+  // store back into the instance variable.
+  const char *CurPtrShadow = CurPtr;
+  
   // Read the type of the token.
-  T.setKind((tok::TokenKind) Read8(CurPtr));
+  T.setKind((tok::TokenKind) Read8(CurPtrShadow));
   
   // Set flags.  This is gross, since we are really setting multiple flags.
-  T.setFlag((Token::TokenFlags) Read8(CurPtr));
+  T.setFlag((Token::TokenFlags) Read8(CurPtrShadow));
   
   // Set the IdentifierInfo* (if any).
-  T.setIdentifierInfo(PTHMgr.ReadIdentifierInfo(CurPtr));
+  T.setIdentifierInfo(PTHMgr.ReadIdentifierInfo(CurPtrShadow));
   
   // Set the SourceLocation.  Since all tokens are constructed using a
-  // raw lexer, they will all be offseted from the same FileID.
-  T.setLocation(SourceLocation::getFileLoc(FileID, Read32(CurPtr)));
+  // raw, they will all be offseted from the same FileID.
+  T.setLocation(SourceLocation::getFileLoc(FileID, Read32(CurPtrShadow)));
   
   // Finally, read and set the length of the token.
-  T.setLength(Read32(CurPtr));  
+  T.setLength(Read32(CurPtrShadow));
+  
+  CurPtr = CurPtrShadow;
 }
 
 //===----------------------------------------------------------------------===//