On Mon, Dec 16, 2013 at 11:12:40PM +0100, Jakub Jelinek wrote: > When testing the patch the overflow-2.c testcase didn't exist yet, > nor was ubsan on -m32 actually ever reporting overflows on the DImode > multiplication (it simply expanded it as normal DImode multiplication with > no overflow checking). > > To me this looks like very old bug (r2174 added it), will bootstrap/regtest > this: > > 2013-12-16 Jakub Jelinek <ja...@redhat.com> > > * expr.c (convert_modes): For SUBREG_PROMOTED_VAR_P use SUBREG_REG (x) > instead of x as last gen_lowpart argument. > > --- gcc/expr.c.jj 2013-12-12 09:39:45.000000000 +0100 > +++ gcc/expr.c 2013-12-16 23:05:07.519747459 +0100 > @@ -719,7 +719,7 @@ convert_modes (enum machine_mode mode, e > if (GET_CODE (x) == SUBREG && SUBREG_PROMOTED_VAR_P (x) > && GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) >= GET_MODE_SIZE (mode) > && SUBREG_PROMOTED_UNSIGNED_P (x) == unsignedp) > - x = gen_lowpart (mode, x); > + x = gen_lowpart (mode, SUBREG_REG (x)); > > if (GET_MODE (x) != VOIDmode) > oldmode = GET_MODE (x); >
Successfully bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? Jakub