[Bug c++/94470] [8/9/10 Regression] Constexpr variable initialization with self-modifying constructor incorrectly rejected since r7-6728

2020-04-03 Thread ppalka at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94470

Patrick Palka  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
  Known to fail||10.0, 7.5.0, 8.4.0, 9.3.0
 Ever confirmed|0   |1
   Last reconfirmed||2020-04-03
  Known to work||6.5.0
 CC||jason at gcc dot gnu.org
   Keywords||ice-on-valid-code
   Target Milestone|--- |10.0
Summary|Constexpr variable  |[8/9/10 Regression]
   |initialization with |Constexpr variable
   |self-modifying constructor  |initialization with
   |incorrectly rejected since  |self-modifying constructor
   |r7-6728 |incorrectly rejected since
   ||r7-6728

[Bug c++/94470] [8/9/10 Regression] Constexpr variable initialization with self-modifying constructor incorrectly rejected since r7-6728

2020-04-03 Thread mpolacek at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94470

Marek Polacek  changed:

   What|Removed |Added

   Target Milestone|10.0|8.5

[Bug c++/94470] [8/9/10 Regression] Constexpr variable initialization with self-modifying constructor incorrectly rejected since r7-6728

2020-04-03 Thread mpolacek at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94470

Marek Polacek  changed:

   What|Removed |Added

 CC||mpolacek at gcc dot gnu.org
   Priority|P3  |P2
   Keywords|ice-on-valid-code   |rejects-valid

[Bug c++/94470] [8/9/10 Regression] Constexpr variable initialization with self-modifying constructor incorrectly rejected since r7-6728

2020-04-13 Thread ppalka at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94470

Patrick Palka  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Assignee|unassigned at gcc dot gnu.org  |ppalka at gcc dot 
gnu.org

[Bug c++/94470] [8/9/10 Regression] Constexpr variable initialization with self-modifying constructor incorrectly rejected since r7-6728

2020-04-13 Thread cvs-commit at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94470

--- Comment #1 from CVS Commits  ---
The master branch has been updated by Patrick Palka :

https://gcc.gnu.org/g:077dd9b3f17710da8af6adce816754ddceb57b5a

commit r10-7704-g077dd9b3f17710da8af6adce816754ddceb57b5a
Author: Patrick Palka 
Date:   Mon Apr 13 16:53:02 2020 -0400

c++: More self-modifying constexpr init [PR94470]

In this PR we're incorrectly rejecting a self-modifying constexpr
initializer as
a consequence of the fix for PR78572.

It looks like however that the fix for PR78572 is obsoleted by the fix for
PR89336: the testcase from the former PR successfully compiles even with
its fix
reverted.

But then further testing showed that the analogous testcase of PR78572
where the
array has an aggregate element type is still problematic (i.e. we ICE) even
with
the fix for PR78572 applied.  The reason is that in cxx_eval_bare_aggregate
we
attach a constructor_elt of aggregate type always to the end of the new
CONSTRUCTOR, but that's not necessarily correct if the CONSTRUCTOR is
self-modifying.  We should instead be using get_or_insert_ctor_field to
insert
the constructor_elt in the right place.

So this patch reverts the PR78572 fix and makes the appropriate changes to
cxx_eval_bare_aggregate.  This fixes PR94470, and we now are also able to
fully
reduce the initializers of 'arr' and 'arr2' in the new test array57.C to
constant initializers.

gcc/cp/ChangeLog:

PR c++/94470
* constexpr.c (get_or_insert_ctor_field): Set default value of
parameter
'pos_hint' to -1.
(cxx_eval_bare_aggregate): Use get_or_insert_ctor_field instead of
assuming the the next index belongs at the end of the new
CONSTRUCTOR.
(cxx_eval_store_expression): Revert PR c++/78572 fix.

gcc/testsuite/ChangeLog:

PR c++/94470
* g++.dg/cpp1y/constexpr-nsdmi8.C: New test.
* g++.dg/cpp1y/constexpr-nsdmi9.C: New test.
* g++.dg/init/array57.C: New test.