https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105256

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Blocks|                            |102990

--- Comment #28 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Martin Liška from comment #27)
> So it started on gcc-11 branch with r11-9711-g6ba2a7e7474135.

For

struct S {
  struct Prefs {
    struct P {
      int i = 42;
      int j = i;
    } p;
    void Load();
  };
};

void S::Prefs::Load() {
  *this = {};
};

that is, which probably means that the assumtion CTORs are already folded
is false and with the PR102990 change we no longer constant fold the
initializer.  Before:

;; Function void S::Prefs::Load() (null)
;; enabled by -tree-original


<<cleanup_point <<< Unknown tree: expr_stmt
  (void) (*(struct Prefs *) this = *(struct Prefs &) &TARGET_EXPR <D.2377,
{.p={.i=42, .j=42}}>) >>>>>;


After:

;; Function void S::Prefs::Load() (null)
;; enabled by -tree-original


<<cleanup_point <<< Unknown tree: expr_stmt
  (void) (*(struct Prefs *) this = *(struct Prefs &) &TARGET_EXPR <D.2377,
{.p={.i=42, .j=(&<PLACEHOLDER_EXPR struct P>)->i}}>) >>>>>;

which explains why the PR102990 change makes a difference here (and why it
is a recent regression for compiling Firefox on the branch).


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102990
[Bug 102990] [9/10 Regression] ICE in tsubst_copy_and_build with NSDMI and
double to int conversion

Reply via email to