This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [C++] Fix decomp ICE with invalid initializer (PR c++/81258)


On 06/30/2017 01:24 PM, Jakub Jelinek wrote:

The initializer for structured binding has to be one of:
= assignment-expression
( assignment-expression )
{ assignment-expression }
but cp_parser_initializer can parse other forms, with fewer or more
expressions in there.  Some cases we caught with various cryptic errors
or pedwarns, but others we just ICEd on.

The following patch attempts to check this.

ok, but ...

--- gcc/testsuite/g++.dg/cpp1z/decomp21.C.jj	2017-01-19 17:01:21.000000000 +0100
+++ gcc/testsuite/g++.dg/cpp1z/decomp21.C	2017-06-30 11:07:04.786746784 +0200
@@ -12,5 +12,5 @@ foo ()
    auto [ n, o, p ] { a };
    auto [ q, r, t ] ( s );
    auto [ u, v, w ] ( s, );      // { dg-error "expected primary-expression before '.' token" }
-  auto [ x, y, z ] ( a );       // { dg-error "expression list treated as compound expression in initializer" "" { target *-*-* } .-1 }
+  auto [ x, y, z ] ( a );       // { dg-error "invalid initializer for structured binding" "" { target *-*-* } .-1 }
  }

The .-1 on the final error is actually about the previous statement, not the line it's lexically on. Could you put it on a line on its own, while you're there?

--
Nathan Sidwell


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]