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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-06-18
                 CC|                            |ebotcazou at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
This is because of gimplification interpreting a CONSTURCTOR with missing
elements as to clear them unless CONSTRUCTOR_NO_CLEARING is set (which isn't).

So the GENERIC _doesn't_ look good since it says (implicitely) that 'a' is
zeroed.

Confirmed as C++ issue.

There's also the following weak heuristic that might kick in if
CONSTRUCTOR_NO_CLEARING would be set:

        else if (num_ctor_elements - num_nonzero_elements
                 > CLEAR_RATIO (optimize_function_for_speed_p (cfun))
                 && num_nonzero_elements < num_ctor_elements / 4)
          /* If there are "lots" of zeros, it's more efficient to clear
             the memory and then set the nonzero elements.  */
          cleared = true;

with CONSTRUCTOR_NO_CLEARING this heuristic is off by not honoring
the constructor elements being not present (but for the testcase it
doesn't matter).  CCing Eric for this specific issue (not the C++ one).

Reply via email to