Index: parse.c =================================================================== RCS file: /usr/cvs/cm3/m3-sys/m3cc/gcc/gcc/m3cg/parse.c,v retrieving revision 1.168 diff -u -w -r1.168 parse.c --- parse.c 1 Jun 2010 03:51:04 -0000 1.168 +++ parse.c 1 Jun 2010 12:06:55 -0000 @@ -4402,11 +4402,16 @@ INTEGER (n); gcc_assert (INTEGRAL_TYPE_P (t)); - gcc_assert (n > 0); + gcc_assert (n >= 0); + if (n == 0) + EXPR_REF (-2) = m3_cast(t, v_zero); + else + { t = sign_extend ? m3_signed_type (t) : m3_unsigned_type (t); EXPR_REF (-2) = m3_do_extract (EXPR_REF (-2), EXPR_REF (-1), build_int_cst (t_int, n), t); + } EXPR_POP (); } @@ -4418,6 +4423,9 @@ int b = TYPE_PRECISION (t) - n - m; tree c, d, e; + gcc_assert (m >= 0); + gcc_assert (n > 0); + if ((a < 0) || (a >= TYPE_PRECISION (t)) || (b < 0) || (b >= TYPE_PRECISION (t))) { @@ -4444,11 +4452,16 @@ gcc_assert (INTEGRAL_TYPE_P (t)); gcc_assert (m >= 0); - gcc_assert (n > 0); + gcc_assert (n >= 0); + if (n == 0) + EXPR_REF (-1) = m3_cast(t, v_zero); + else + { t = sign_extend ? m3_signed_type (t) : m3_unsigned_type (t); EXPR_REF (-1) = m3_do_fixed_extract (EXPR_REF (-1), m, n, t); } +} static void m3cg_insert (void)