[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