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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
   Target Milestone|7.0                         |5.5

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Which also mean that the following generates wrong-code in not treating
*p = (struct s){} as possibly throwing since that revision.

struct s {
    int i;
};

extern int use_memcpy;
extern void my_memcpy(void*, void*, int);

int
f (struct s* p)
{
  struct s a;

  try
    {
      a = (struct s){};
      if (!use_memcpy)
        *p = (struct s){};
      else
        my_memcpy (p, &a, sizeof (struct s));
    } catch (...)
  {
    return 0;
  }
return 1;
}

Reply via email to