OSDN Git Service

PR lto/49123
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 May 2011 20:37:18 +0000 (20:37 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 May 2011 20:37:18 +0000 (20:37 +0000)
* fold-const.c (constant_boolean_node): If type is non-NULL,
use build_int_cst_type instead of build_int_cst.

* gcc.c-torture/execute/pr49123.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@174087 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr49123.c [new file with mode: 0644]

index 7b5c1e9..9e4b0f6 100644 (file)
@@ -1,5 +1,9 @@
 2011-05-23  Jakub Jelinek  <jakub@redhat.com>
 
+       PR lto/49123
+       * fold-const.c (constant_boolean_node): If type is non-NULL,
+       use build_int_cst_type instead of build_int_cst.
+
        PR debug/49032
        * dbxout.c: Include cgraph.h.
        (dbxout_expand_expr): If a VAR_DECL is TREE_STATIC, not written
index 053ae30..51be79d 100644 (file)
@@ -5953,8 +5953,10 @@ constant_boolean_node (int value, tree type)
     return value ? integer_one_node : integer_zero_node;
   else if (type == boolean_type_node)
     return value ? boolean_true_node : boolean_false_node;
+  else if (type)
+    return build_int_cst_type (type, value);
   else
-    return build_int_cst (type, value);
+    return build_int_cst (NULL_TREE, value);
 }
 
 
index 9757477..780e52d 100644 (file)
@@ -1,5 +1,8 @@
 2011-05-23  Jakub Jelinek  <jakub@redhat.com>
 
+       PR lto/49123
+       * gcc.c-torture/execute/pr49123.c: New test.
+
        PR debug/49032
        * gcc.dg/debug/pr49032.c: New test.
 
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr49123.c b/gcc/testsuite/gcc.c-torture/execute/pr49123.c
new file mode 100644 (file)
index 0000000..2f1f793
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR lto/49123 */
+
+extern void abort (void);
+static struct S { int f : 1; } s;
+static int v = -1;
+
+int
+main ()
+{
+  s.f = v < 0;
+  if ((unsigned int) s.f != -1U)
+    abort ();
+  return 0;
+}