[cfe-commits] r152198 - in /cfe/trunk: include/clang/Basic/DiagnosticLexKinds.td lib/Lex/Lexer.cpp test/SemaCXX/cxx0x-compat.cpp
Richard Smith
richard at metafoo.co.uk
Tue Mar 6 19:24:46 PST 2012
On Tue, Mar 6, 2012 at 7:22 PM, Jordan Rose <jrose at belkadan.com> wrote:
> Can this have a fixit, since almost always the right fix is a space?
>
Not only can it, it already does :-)
I've added a test for the fixit in r152199.
> Jordy
>
>
> On Mar 6, 2012, at 19:13, Richard Smith wrote:
>
> > Author: rsmith
> > Date: Tue Mar 6 21:13:00 2012
> > New Revision: 152198
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=152198&view=rev
> > Log:
> > Add -Wc++11-compat warning for string and character literals followed by
> > identifiers, in cases where those identifiers would be treated as
> > user-defined literal suffixes in C++11.
> >
> > Modified:
> > cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td
> > cfe/trunk/lib/Lex/Lexer.cpp
> > cfe/trunk/test/SemaCXX/cxx0x-compat.cpp
> >
> > Modified: cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td?rev=152198&r1=152197&r2=152198&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td (original)
> > +++ cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td Tue Mar 6
> 21:13:00 2012
> > @@ -131,6 +131,9 @@
> > def warn_cxx98_compat_unicode_literal : Warning<
> > "unicode literals are incompatible with C++98">,
> > InGroup<CXX98Compat>, DefaultIgnore;
> > +def warn_cxx11_compat_user_defined_literal : Warning<
> > + "identifier after literal will be treated as a user-defined literal
> suffix "
> > + "in C++11">, InGroup<CXX11Compat>, DefaultIgnore;
> > def err_unsupported_string_concat : Error<
> > "unsupported non-standard concatenation of string literals">;
> > def err_string_concat_mixed_suffix : Error<
> >
> > Modified: cfe/trunk/lib/Lex/Lexer.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=152198&r1=152197&r2=152198&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Lex/Lexer.cpp (original)
> > +++ cfe/trunk/lib/Lex/Lexer.cpp Tue Mar 6 21:13:00 2012
> > @@ -1574,14 +1574,21 @@
> > }
> >
> > /// LexUDSuffix - Lex the ud-suffix production for user-defined literal
> suffixes
> > -/// in C++11.
> > +/// in C++11, or warn on a ud-suffix in C++98.
> > const char *Lexer::LexUDSuffix(Token &Result, const char *CurPtr) {
> > - assert(getFeatures().CPlusPlus0x && "ud-suffix only exists in C++11");
> > + assert(getFeatures().CPlusPlus);
> >
> > // Maximally munch an identifier. FIXME: UCNs.
> > unsigned Size;
> > char C = getCharAndSize(CurPtr, Size);
> > if (isIdentifierHead(C)) {
> > + if (!getFeatures().CPlusPlus0x) {
> > + if (!isLexingRawMode())
> > + Diag(CurPtr, diag::warn_cxx11_compat_user_defined_literal)
> > + << FixItHint::CreateInsertion(getSourceLocation(CurPtr), " ");
> > + return CurPtr;
> > + }
> > +
> > Result.setFlag(Token::HasUDSuffix);
> > do {
> > CurPtr = ConsumeChar(CurPtr, Size, Result);
> > @@ -1631,7 +1638,7 @@
> > }
> >
> > // If we are in C++11, lex the optional ud-suffix.
> > - if (getFeatures().CPlusPlus0x)
> > + if (getFeatures().CPlusPlus)
> > CurPtr = LexUDSuffix(Result, CurPtr);
> >
> > // If a nul character existed in the string, warn about it.
> > @@ -1714,7 +1721,7 @@
> > }
> >
> > // If we are in C++11, lex the optional ud-suffix.
> > - if (getFeatures().CPlusPlus0x)
> > + if (getFeatures().CPlusPlus)
> > CurPtr = LexUDSuffix(Result, CurPtr);
> >
> > // Update the location of token as well as BufferPtr.
> > @@ -1801,7 +1808,7 @@
> > }
> >
> > // If we are in C++11, lex the optional ud-suffix.
> > - if (getFeatures().CPlusPlus0x)
> > + if (getFeatures().CPlusPlus)
> > CurPtr = LexUDSuffix(Result, CurPtr);
> >
> > // If a nul character existed in the character, warn about it.
> >
> > Modified: cfe/trunk/test/SemaCXX/cxx0x-compat.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx0x-compat.cpp?rev=152198&r1=152197&r2=152198&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/test/SemaCXX/cxx0x-compat.cpp (original)
> > +++ cfe/trunk/test/SemaCXX/cxx0x-compat.cpp Tue Mar 6 21:13:00 2012
> > @@ -27,3 +27,13 @@
> > }
> > s = { n }, // expected-warning {{non-constant-expression cannot be
> narrowed from type 'int' to 'char' in initializer list in C++11}}
> expected-note {{explicit cast}}
> > t = { 1234 }; // expected-warning {{constant expression evaluates to
> 1234 which cannot be narrowed to type 'char' in C++11}} expected-warning
> {{changes value}} expected-note {{explicit cast}}
> > +
> > +#define PRIuS "uS"
> > +int printf(const char *, ...);
> > +typedef __typeof(sizeof(int)) size_t;
> > +void h(size_t foo, size_t bar) {
> > + printf("foo is %"PRIuS", bar is %"PRIuS, foo, bar); //
> expected-warning 2{{identifier after literal will be treated as a
> user-defined literal suffix in C++11}}
> > +}
> > +
> > +#define x + 1
> > +char c = 'x'x; // expected-warning {{will be treated as a user-defined
> literal suffix}}
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120306/34b6e2de/attachment.html>
More information about the cfe-commits
mailing list