------- Additional Comments From steven at gcc dot gnu dot org 2005-02-08 21:07 ------- We have this hunk in the .vrp dump: # BLOCK 1 # PRED: 4 (true,exec) <L0>:; iD.1901_30 = iD.1901_1; D.1909_31 = D.1909_4; i.0D.1911_5 = (unsigned intD.6) iD.1901_30; D.1909_6 = D.1909_31; D.1912_7 = (unsigned intD.6) D.1909_6; if (i.0D.1911_5 >= D.1912_7) goto <L1>; else goto <L2>; # SUCC: 2 (true,exec) 3 (false,exec) # BLOCK 2 # PRED: 1 (true,exec) <L1>:; # TMT.3D.1926_25 = V_MAY_DEF <TMT.3D.1926_20>; # TMT.2D.1925_26 = V_MAY_DEF <TMT.2D.1925_19>; # VUSE <_ZTIiD.1905_14>; D.1904_16 = __cxa_allocate_exception (4); D.1914_18 = (intD.2 *) D.1904_16; # TMT.3D.1926_27 = V_MAY_DEF <TMT.3D.1926_25>; *D.1914_18 = 5; D.1914_2 = D.1914_18; # VUSE <_ZTIiD.1905_14>; # VUSE <TMT.3D.1926_27>; # VUSE <TMT.2D.1925_26>; __cxa_throw (D.1904_16, &_ZTIiD.1905, 0B); # SUCC: # BLOCK 3 # PRED: 1 (false,exec) <L2>:; and: i.0_5: VARYING D.1909_6: [-2147483648, i_30 - 1] D.1912_7: VARYING If WORK_WORK_WORK is defined, we have: # BLOCK 1 # PRED: 4 (true,exec) <L0>:; iD.1901_30 = iD.1901_1; D.1909_31 = D.1909_4; D.1909_5 = D.1909_31; if (iD.1901_30 >= D.1909_5) goto <L1>; else goto <L2>; # SUCC: 2 (true,exec) 3 (false,exec) # BLOCK 2 # PRED: 1 (true,exec) <L1>:; # TMT.2D.1925_24 = V_MAY_DEF <TMT.2D.1925_19>; # TMT.1D.1924_25 = V_MAY_DEF <TMT.1D.1924_18>; # VUSE <_ZTIiD.1905_13>; D.1904_15 = __cxa_allocate_exception (4); D.1912_17 = (intD.2 *) D.1904_15; # TMT.2D.1925_26 = V_MAY_DEF <TMT.2D.1925_24>; *D.1912_17 = 5; D.1912_2 = D.1912_17; # VUSE <_ZTIiD.1905_13>; # VUSE <TMT.2D.1925_26>; # VUSE <TMT.1D.1924_25>; __cxa_throw (D.1904_15, &_ZTIiD.1905, 0B); # SUCC: # BLOCK 3 # PRED: 1 (false,exec) <L2>:; and i_30: [0, D.1909_4 - 1] D.1909_5: [0, i_30 - 1] Note that even though (i_30 >= D.1909_5), VRP does not clean this up. The exception stays there until DOM1.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18178