OSDN Git Service

2007-11-20 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Nov 2007 22:51:23 +0000 (22:51 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Nov 2007 22:51:23 +0000 (22:51 +0000)
PR middle-end/34154
* gimplify.c (gimplify_switch_expr): Use tree_int_cst_lt instead
of the signed INT_CST_LT.
* stmt.c (expand_case): Likewise.
(estimate_case_costs): Likewise.

* testsuite/gcc.c-torture/execute/pr34154.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130324 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/gimplify.c
gcc/stmt.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr34154.c [new file with mode: 0644]

index 291479e..ac26d40 100644 (file)
@@ -1,3 +1,11 @@
+2007-11-20  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/34154
+       * gimplify.c (gimplify_switch_expr): Use tree_int_cst_lt instead
+       of the signed INT_CST_LT.
+       * stmt.c (expand_case): Likewise.
+       (estimate_case_costs): Likewise.
+
 2007-11-20  Rask Ingemann Lambertsen  <rask@sygehus.dk>
 
        * read-rtl.c (fatal_expected_char): Print EOF as text rather that
index 212a9dc..8a74c3c 100644 (file)
@@ -1413,7 +1413,7 @@ gimplify_switch_expr (tree *expr_p, tree *pre_p)
            {
              /* Discard empty ranges.  */
              tree high = CASE_HIGH (elt);
-             if (high && INT_CST_LT (high, low))
+             if (high && tree_int_cst_lt (high, low))
                remove_element = TRUE;
            }
          else
index f1be5e0..7d1a266 100644 (file)
@@ -2360,7 +2360,7 @@ expand_case (tree exp)
          high = CASE_HIGH (elt);
 
          /* Discard empty ranges.  */
-         if (high && INT_CST_LT (high, low))
+         if (high && tree_int_cst_lt (high, low))
            continue;
 
          case_list = add_case_node (case_list, index_type, low, high,
@@ -2387,9 +2387,9 @@ expand_case (tree exp)
            }
          else
            {
-             if (INT_CST_LT (n->low, minval))
+             if (tree_int_cst_lt (n->low, minval))
                minval = n->low;
-             if (INT_CST_LT (maxval, n->high))
+             if (tree_int_cst_lt (maxval, n->high))
                maxval = n->high;
            }
          /* A range counts double, since it requires two compares.  */
@@ -2664,7 +2664,8 @@ estimate_case_costs (case_node_ptr node)
 
   for (n = node; n; n = n->right)
     {
-      if ((INT_CST_LT (n->low, min_ascii)) || INT_CST_LT (max_ascii, n->high))
+      if (tree_int_cst_lt (n->low, min_ascii)
+         || tree_int_cst_lt (max_ascii, n->high))
        return 0;
 
       for (i = (HOST_WIDE_INT) TREE_INT_CST_LOW (n->low);
index de6a632..19f65a9 100644 (file)
@@ -1,3 +1,8 @@
+2007-11-20  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/34154
+       * testsuite/gcc.c-torture/execute/pr34154.c: New testcase.
+
 2007-11-20  Uros Bizjak  <ubizjak@gmail.com>
 
        * gcc.dg/tree-ssa/20030714-1.c: Cleanup dom3 dump file.
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr34154.c b/gcc/testsuite/gcc.c-torture/execute/pr34154.c
new file mode 100644 (file)
index 0000000..cd7bfc6
--- /dev/null
@@ -0,0 +1,16 @@
+int foo( unsigned long long aLL )
+{
+    switch( aLL )
+    {
+        case 1000000000000000000ULL ... 9999999999999999999ULL : return 19 ; 
+        default                                 : return 20 ;
+    };
+};
+extern void abort (void);
+int main()
+{
+    unsigned long long aLL = 1000000000000000000ULL;
+    if (foo (aLL) != 19)
+       abort ();
+    return 0;
+}