From: Richard Guenther Date: Thu, 12 Apr 2007 09:20:42 +0000 (+0000) Subject: re PR tree-optimization/31169 (Bootstrap comparison error at revision 122821) X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6e734d98206344f9d2469b69bff74685382927bc;p=platform%2Fupstream%2Fgcc.git re PR tree-optimization/31169 (Bootstrap comparison error at revision 122821) 2007-04-12 Richard Guenther PR tree-optimization/31169 * gcc.c-torture/execute/pr31169.c: New testcase. From-SVN: r123737 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f431bcb..c5cf4f6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2007-04-12 Richard Guenther + PR tree-optimization/31169 + * gcc.c-torture/execute/pr31169.c: New testcase. + +2007-04-12 Richard Guenther + PR tree-optimization/24689 PR tree-optimization/31307 * g++.dg/tree-ssa/pr31307.C: New testcase. diff --git a/gcc/testsuite/gcc.c-torture/execute/pr31169.c b/gcc/testsuite/gcc.c-torture/execute/pr31169.c new file mode 100644 index 0000000..447dd45 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr31169.c @@ -0,0 +1,51 @@ +extern void abort(); + +#define HOST_WIDE_INT long +#define HOST_BITS_PER_WIDE_INT (sizeof(long)*8) + +struct tree_type +{ + unsigned int precision : 9; +}; + +int +sign_bit_p (struct tree_type *t, HOST_WIDE_INT val_hi, unsigned HOST_WIDE_INT val_lo) +{ + unsigned HOST_WIDE_INT mask_lo, lo; + HOST_WIDE_INT mask_hi, hi; + int width = t->precision; + + if (width > HOST_BITS_PER_WIDE_INT) + { + hi = (unsigned HOST_WIDE_INT) 1 << (width - HOST_BITS_PER_WIDE_INT - 1); + lo = 0; + + mask_hi = ((unsigned HOST_WIDE_INT) -1 + >> (2 * HOST_BITS_PER_WIDE_INT - width)); + mask_lo = -1; + } + else + { + hi = 0; + lo = (unsigned HOST_WIDE_INT) 1 << (width - 1); + + mask_hi = 0; + mask_lo = ((unsigned HOST_WIDE_INT) -1 + >> (HOST_BITS_PER_WIDE_INT - width)); + } + + if ((val_hi & mask_hi) == hi + && (val_lo & mask_lo) == lo) + return 1; + + return 0; +} + +int main() +{ + struct tree_type t; + t.precision = 1; + if (!sign_bit_p (&t, 0, -1)) + abort (); + return 0; +}