re PR c++/20023 (internal compiler error: Segmentation fault)
authorJakub Jelinek <jakub@redhat.com>
Thu, 17 Feb 2005 23:56:54 +0000 (00:56 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 17 Feb 2005 23:56:54 +0000 (00:56 +0100)
PR c++/20023
PR tree-optimization/20009
* convert.c (convert_to_integer): Revert 2005-02-16 change.

* gcc.c-torture/compile/20050217-1.c: New test.
* g++.dg/opt/switch3.C: New test.

From-SVN: r95208

gcc/ChangeLog
gcc/convert.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/switch3.C [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/20050217-1.c [new file with mode: 0644]

index 610d47ac393f5aa49fe1318ee13e74e8dfa370db..77930b280fa1bbc9b74304577d55702bb020bc79 100644 (file)
@@ -1,5 +1,9 @@
 2005-02-18  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c++/20023
+       PR tree-optimization/20009
+       * convert.c (convert_to_integer): Revert 2005-02-16 change.
+
        PR tree-optimization/18947
        * cgraphunit.c (cgraph_finalize_function): When redefining an extern
        inline, remove all nodes that are inlined into the extern inline
index c48b242b6550fcea8e49fef11d76cf9b2f2481a6..f900ace21e4e7634eff6b36fe19161bff0d5a180 100644 (file)
@@ -387,8 +387,7 @@ convert_to_integer (tree type, tree expr)
        expr = integer_zero_node;
       else
        expr = fold (build1 (CONVERT_EXPR,
-                            lang_hooks.types.type_for_size
-                               (POINTER_SIZE, TYPE_UNSIGNED (type)),
+                            lang_hooks.types.type_for_size (POINTER_SIZE, 0),
                             expr));
 
       return convert_to_integer (type, expr);
index ccfd4ef6929469d9653371cf6c4e548e2a3b9122..668d6e471c3531b39b09c71d2c15c02c9262c759 100644 (file)
@@ -1,5 +1,10 @@
 2005-02-18  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c++/20023
+       PR tree-optimization/20009
+       * gcc.c-torture/compile/20050217-1.c: New test.
+       * g++.dg/opt/switch3.C: New test.
+
        PR tree-optimization/18947
        * gcc.c-torture/compile/20050215-1.c: New test.
        * gcc.c-torture/compile/20050215-2.c: New test.
diff --git a/gcc/testsuite/g++.dg/opt/switch3.C b/gcc/testsuite/g++.dg/opt/switch3.C
new file mode 100644 (file)
index 0000000..643cac3
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/20023
+// { dg-do compile }
+// { dg-options "-O2" }
+
+void f (void);
+typedef __SIZE_TYPE__ size_t;
+void g (void *a)
+{
+  size_t b = (size_t) a;
+  switch (b)
+  {
+    case 1:
+    f ();
+    break;
+  }
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/20050217-1.c b/gcc/testsuite/gcc.c-torture/compile/20050217-1.c
new file mode 100644 (file)
index 0000000..f4b928d
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR c++/20023 */
+
+void f (void);
+typedef __SIZE_TYPE__ size_t;
+void g (void *a)
+{
+  size_t b = (size_t) a;
+  switch (b)
+  {
+    case 1:
+    f ();
+    break;
+  }
+}