aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <bonzini@gnu.org>2004-02-10 13:41:16 +0000
committerPaolo Bonzini <bonzini@gcc.gnu.org>2004-02-10 13:41:16 +0000
commit31cc6081778b66c7fc1d0e864fea5a73dcbd25c8 (patch)
tree0875007b2f72c9c1dff1299a2d63339ae8a1c885
parentd1d5c836a1a426c224efe898b5bad4ed6f3e055e (diff)
downloadgcc-31cc6081778b66c7fc1d0e864fea5a73dcbd25c8.zip
gcc-31cc6081778b66c7fc1d0e864fea5a73dcbd25c8.tar.gz
gcc-31cc6081778b66c7fc1d0e864fea5a73dcbd25c8.tar.bz2
re PR middle-end/14092 (fold strips conversion from pointer to integer)
PR c/14092 * gcc.dg/pr14092-1.c: New testcase. * fold-const.c (fold) <NEGATE_EXPR>: Convert result of negate_expr back to the original type. From-SVN: r77602
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/fold-const.c2
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/pr14092-1.c17
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1f6b7482..c235d08 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-02-10 Paolo Bonzini <bonzini@gnu.org>
+
+ PR c/14092
+ * fold-const.c (fold) <NEGATE_EXPR>: Convert result of
+ negate_expr back to the original type.
+
2004-02-10 Alan Modra <amodra@bigpond.net.au>
* config/rs6000/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Don't
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 3f68051..71f1e9b 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -5785,7 +5785,7 @@ fold (tree expr)
case NEGATE_EXPR:
if (negate_expr_p (arg0))
- return negate_expr (arg0);
+ return fold_convert (type, negate_expr (arg0));
return t;
case ABS_EXPR:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b0bcf5f..a22f644 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2004-02-10 Paolo Bonzini <bonzini@gnu.org>
+
+ PR c/14092
+
+ * gcc.dg/pr14092-1.c: New testcase.
+
2004-02-10 Alan Modra <amodra@bigpond.net.au>
* gcc.dg/cpp/assert4.c: Fix typo last change.
diff --git a/gcc/testsuite/gcc.dg/pr14092-1.c b/gcc/testsuite/gcc.dg/pr14092-1.c
new file mode 100644
index 0000000..86076c2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr14092-1.c
@@ -0,0 +1,17 @@
+/* PR c/14092
+ * Origin: bonzini@gnu.org
+ * rejects-valid
+ */
+/* { dg-do compile } */
+
+typedef struct _PLCI {
+ unsigned char x;
+ unsigned char buf[1];
+} PLCI;
+
+
+void nl_ind(PLCI * plci)
+{
+ plci->x = -((int)(plci->buf)) & 3;
+}
+