[cfe-commits] r157064 - in /cfe/trunk: include/clang/Lex/Lexer.h lib/Lex/Lexer.cpp lib/Lex/PPDirectives.cpp

Igor Minin i.minin.llvm at gmail.com
Sat May 26 11:48:47 PDT 2012


Sorry, forget about updating StringRef.h

On Sat, May 26, 2012 at 10:33 PM, Igor Minin <i.minin.llvm at gmail.com> wrote:
> It breaks compilation for me:
>
> llvm[4]: Compiling PPDirectives.cpp for Debug+Asserts build
> /home/igor/SRC/llvm/tools/clang/lib/Lex/PPDirectives.cpp: In member
> function ‘void clang::Preprocessor::HandleUserDiagnosticDirective(clang::Token&,
> bool)’:
> /home/igor/SRC/llvm/tools/clang/lib/Lex/PPDirectives.cpp:1026: error:
> ‘class llvm::StringRef’ has no member named ‘ltrim’
>
>
> On Fri, May 18, 2012 at 11:32 PM, Benjamin Kramer
> <benny.kra at googlemail.com> wrote:
>>
>> Author: d0k
>> Date: Fri May 18 14:32:16 2012
>> New Revision: 157064
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=157064&view=rev
>> Log:
>> Lexer::ReadToEndOfLine: Only build the string if it's actually used and do so in a less malloc-intensive way.
>>
>> Modified:
>>    cfe/trunk/include/clang/Lex/Lexer.h
>>    cfe/trunk/lib/Lex/Lexer.cpp
>>    cfe/trunk/lib/Lex/PPDirectives.cpp
>>
>> Modified: cfe/trunk/include/clang/Lex/Lexer.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Lexer.h?rev=157064&r1=157063&r2=157064&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Lex/Lexer.h (original)
>> +++ cfe/trunk/include/clang/Lex/Lexer.h Fri May 18 14:32:16 2012
>> @@ -200,7 +200,7 @@
>>
>>   /// ReadToEndOfLine - Read the rest of the current preprocessor line as an
>>   /// uninterpreted string.  This switches the lexer out of directive mode.
>> -  std::string ReadToEndOfLine();
>> +  void ReadToEndOfLine(SmallVectorImpl<char> *Result = 0);
>>
>>
>>   /// Diag - Forwarding function for diagnostics.  This translate a source
>>
>> Modified: cfe/trunk/lib/Lex/Lexer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=157064&r1=157063&r2=157064&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Lex/Lexer.cpp (original)
>> +++ cfe/trunk/lib/Lex/Lexer.cpp Fri May 18 14:32:16 2012
>> @@ -2286,10 +2286,9 @@
>>
>>  /// ReadToEndOfLine - Read the rest of the current preprocessor line as an
>>  /// uninterpreted string.  This switches the lexer out of directive mode.
>> -std::string Lexer::ReadToEndOfLine() {
>> +void Lexer::ReadToEndOfLine(SmallVectorImpl<char> *Result) {
>>   assert(ParsingPreprocessorDirective && ParsingFilename == false &&
>>          "Must be in a preprocessing directive!");
>> -  std::string Result;
>>   Token Tmp;
>>
>>   // CurPtr - Cache BufferPtr in an automatic variable.
>> @@ -2298,7 +2297,8 @@
>>     char Char = getAndAdvanceChar(CurPtr, Tmp);
>>     switch (Char) {
>>     default:
>> -      Result += Char;
>> +      if (Result)
>> +        Result->push_back(Char);
>>       break;
>>     case 0:  // Null.
>>       // Found end of file?
>> @@ -2306,11 +2306,12 @@
>>         if (isCodeCompletionPoint(CurPtr-1)) {
>>           PP->CodeCompleteNaturalLanguage();
>>           cutOffLexing();
>> -          return Result;
>> +          return;
>>         }
>>
>>         // Nope, normal character, continue.
>> -        Result += Char;
>> +        if (Result)
>> +          Result->push_back(Char);
>>         break;
>>       }
>>       // FALL THROUGH.
>> @@ -2329,8 +2330,8 @@
>>       }
>>       assert(Tmp.is(tok::eod) && "Unexpected token!");
>>
>> -      // Finally, we're done, return the string we found.
>> -      return Result;
>> +      // Finally, we're done;
>> +      return;
>>     }
>>   }
>>  }
>>
>> Modified: cfe/trunk/lib/Lex/PPDirectives.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=157064&r1=157063&r2=157064&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Lex/PPDirectives.cpp (original)
>> +++ cfe/trunk/lib/Lex/PPDirectives.cpp Fri May 18 14:32:16 2012
>> @@ -1018,15 +1018,13 @@
>>   // tokens.  For example, this is allowed: "#warning `   'foo".  GCC does
>>   // collapse multiple consequtive white space between tokens, but this isn't
>>   // specified by the standard.
>> -  std::string Message = CurLexer->ReadToEndOfLine();
>> +  SmallString<128> Message;
>> +  CurLexer->ReadToEndOfLine(&Message);
>>
>>   // Find the first non-whitespace character, so that we can make the
>>   // diagnostic more succinct.
>> -  StringRef Msg(Message);
>> -  size_t i = Msg.find_first_not_of(' ');
>> -  if (i < Msg.size())
>> -    Msg = Msg.substr(i);
>> -
>> +  StringRef Msg = Message.str().ltrim(" ");
>> +
>>   if (isWarning)
>>     Diag(Tok, diag::pp_hash_warning) << Msg;
>>   else
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list