[cfe-dev] Newline vs space in C++ parsing

Nico Weber thakis at chromium.org
Fri Jan 18 10:26:17 PST 2013


Hi,

I think this is a bug that was introduced in r159549 / r159164. This fixes it:

Index: lib/Parse/ParseDeclCXX.cpp
===================================================================
--- lib/Parse/ParseDeclCXX.cpp	(revision 172830)
+++ lib/Parse/ParseDeclCXX.cpp	(working copy)
@@ -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;

I'll upload this for review once I added tests.

Thanks!

On Fri, Jan 18, 2013 at 10:01 AM, Nickolai Zeldovich
<nickolai at csail.mit.edu> wrote:
> I'm seeing surprising behavior in Clang 3.2 and 3.3-svn (as of a few days
> ago), where newlines seem to be treated differently from spaces in parsing
> C++ code.  In particular, the following code compiles just fine:
>
>   % cat x.cc
>   struct s {};
>
>   struct s operator++(struct s a)
>   { return a; }
>   % clang -c x.cc
>   %
>
> but this version, with a newline instead of a space, generates an error:
>
>   % cat x.cc
>   struct s {};
>
>   struct s
>   operator++(struct s a)
>   { return a; }
>   % clang -c x.cc
>   x.cc:3:9: error: expected ';' after struct
>   struct s
>           ^
>           ;
>   x.cc:4:1: error: C++ requires a type specifier for all declarations
>   operator++(struct s a)
>   ^~~~~~~~
>   x.cc:5:10: error: no viable conversion from 'struct s' to 'int'
>   { return a; }
>            ^
>   3 errors generated.
>   %
>
> g++ 4.7.2 accepts either variation, and I was expecting newlines and spaces
> to be both treated as whitespace in C++.  Is this a bug in Clang or
> something more subtle?
>
> Nickolai.
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>



More information about the cfe-dev mailing list