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.