http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55936



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



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Status|UNCONFIRMED                 |ASSIGNED

   Last reconfirmed|                            |2013-01-11

         AssignedTo|unassigned at gcc dot       |rguenth at gcc dot gnu.org

                   |gnu.org                     |

     Ever Confirmed|0                           |1

      Known to fail|                            |4.6.4, 4.7.2, 4.8.0



--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> 2013-01-11 
10:48:08 UTC ---

Confirmed.  We should see that i = baz () is not executed.



Visiting conditional with predicate: if (i_22 < 0)



With known ranges

        i_22: [j_12(D), j_12(D)]  EQUIVALENCES: { i_9(D) j_12(D) i_24 i_26 } (4

elements)



Predicate evaluates to: DON'T KNOW



that result happens because i_22 was computed as



Visiting statement:

i_22 = ASSERT_EXPR <i_24, i_24 == j_12(D)>;



Intersecting

  [j_12(D), j_12(D)]  EQUIVALENCES: { i_9(D) j_12(D) i_24 i_26 } (4 elements)

and

  [10, 30]  EQUIVALENCES: { i_9(D) i_26 } (2 elements)

to

  [j_12(D), j_12(D)]  EQUIVALENCES: { i_9(D) j_12(D) i_24 i_26 } (4 elements)

Found new range for i_22: [j_12(D), j_12(D)]



that's correct (equivalences have the [10, 30] range but they are not

checked during predicate evaluation it seems, we could also have

arbitrarily chosen [10, 30] instead of [j_12(D), j_12(D)] here)



This means we compute i as VARYING.

Reply via email to