On 26.05.2012, at 20:33, Igor Minin 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’
Looks like your clang and llvm trees are not in sync. ltrim was added to llvm in r156652. - Ben > > > 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
