https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52985
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2012-04-16 00:00:00 |2021-8-1 --- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- <<cleanup_point <<< Unknown tree: expr_stmt if (flag) { (void) tableA[(int) *__gnu_cxx::__normal_iterator<const int*, std::vector<int> >::operator* (&TARGET_EXPR <D.66535, __gnu_cxx::__normal_iterator<const int*, std::vector<int> >::operator++ (&it, 0)>)]; } else { (void) tableB[(int) *__gnu_cxx::__normal_iterator<const int*, std::vector<int> >::operator* (&TARGET_EXPR <D.66535, __gnu_cxx::__normal_iterator<const int*, std::vector<int> >::operator++ (&it, 0)>)]; } >>>>>; This is totally bogus. Basically we did: (flag ? tableA[*it++] : tableB[*it++]); But then only the *it++ in one of the branches because we only copied the tree and do a deap copy.