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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-12-17
     Ever confirmed|0                           |1

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.  What happens is that

            const int * __for_begin;
      <<cleanup_point <<< Unknown tree: expr_stmt
  (void) (__for_begin = std::initializer_list<int>::begin ((struct
initializer_list *) __for_range)) >>>>>;
            const int * __for_end;
      <<cleanup_point <<< Unknown tree: expr_stmt
  (void) (__for_end = std::initializer_list<int>::end ((struct initializer_list
*) __for_range)) >>>>>;
      while (1)
        {
          if (__for_begin == __for_end) goto <D.35468>;

^^^^  this is true initially

                    int i = (int) *__for_begin;
          <<cleanup_point <<< Unknown tree: expr_stmt
  (void) std::basic_ostream<char>::operator<< ((struct basic_ostream *)
std::basic_ostream<char>::operator<< (&cout, i), endl) >>>>>;
          <<cleanup_point (void)  ++__for_begin>>;
        }

but somehow not when cut&pasting that directly into main().

Reply via email to