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 <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
