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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2024-09-17
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
The issue is that 'n' is address taken and escapes:

  <bb 2> :
  std::ios_base::sync_with_stdio (0);

  <bb 3> :
  std::basic_ios<char>::tie (&cin.D.48191, 0B);
  s_6 = n;
  std::basic_istream<char>::operator>> (&cin, &n);

  <bb 4> :
  _9 = std::basic_ostream<char>::operator<< (&cout, s_6);

we thus consider that for example std::ios_base::sync_with_stdio might
initialize 'n' since we lose the fact that 'n' only becomes live after that
call.  The C++ frontend does not add explicit scopes for

  int n, s = n;

so it doesn't get CLOBBER treatment.  Adding scopes doesn't help either
(the gimplifier doesn't add CLOBBERs for start-of-live).

Reply via email to