[cfe-commits] r172834 - in /cfe/trunk: lib/Parse/ParseDeclCXX.cpp test/Parser/cxx-decl.cpp

Richard Smith richard at metafoo.co.uk
Fri Jan 18 19:48:57 PST 2013


On Fri, Jan 18, 2013 at 10:41 AM, Nico Weber <nicolasweber at gmx.de> wrote:
> Author: nico
> Date: Fri Jan 18 12:41:42 2013
> New Revision: 172834
>
> URL: http://llvm.org/viewvc/llvm-project?rev=172834&view=rev
> Log:
> Fix parsing of class specifiers before '\n' 'operator'.
>
> r159549 / r159164 regressed clang to reject
>
>   struct s {};
>   struct s
>   operator++(struct s a)
>   { return a; }
>
> This fixes the regression. Richard, pleas check if this looks right.

This looks right. Five more such cases fixed in r172886.

> Modified:
>     cfe/trunk/lib/Parse/ParseDeclCXX.cpp
>     cfe/trunk/test/Parser/cxx-decl.cpp
>
> Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=172834&r1=172833&r2=172834&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Fri Jan 18 12:41:42 2013
> @@ -964,6 +964,7 @@
>    case tok::annot_template_id:  // struct foo {...} a<int>    ::b;
>    case tok::l_paren:            // struct foo {...} (         x);
>    case tok::comma:              // __builtin_offsetof(struct foo{...} ,
> +  case tok::kw_operator:        // struct foo operator++() {...}
>      return true;
>    case tok::colon:
>      return CouldBeBitfield;     // enum E { ... }   :         2;
>
> Modified: cfe/trunk/test/Parser/cxx-decl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/cxx-decl.cpp?rev=172834&r1=172833&r2=172834&view=diff
> ==============================================================================
> --- cfe/trunk/test/Parser/cxx-decl.cpp (original)
> +++ cfe/trunk/test/Parser/cxx-decl.cpp Fri Jan 18 12:41:42 2013
> @@ -132,6 +132,24 @@
>    typedef S() : n(1), m(2) { } // expected-error {{function definition declared 'typedef'}}
>  };
>
> +
> +namespace TestIsValidAfterTypeSpecifier {
> +struct s {};
> +
> +namespace a {
> +struct s operator++(struct s a)
> +{ return a; }
> +}
> +
> +namespace b {
> +// The newline after s should make no difference.
> +struct s
> +operator++(struct s a)
> +{ return a; }
> +}
> +
> +}
> +
>  // PR8380
>  extern ""      // expected-error {{unknown linkage language}}
>  test6a { ;// expected-error {{C++ requires a type specifier for all declarations}} \
>
>
> _______________________________________________
> 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