[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:33:49 PDT 2012
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