re PR c/52549 (ice in pointer_diff)
authorRichard Guenther <rguenther@suse.de>
Fri, 13 Apr 2012 09:24:28 +0000 (09:24 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 13 Apr 2012 09:24:28 +0000 (09:24 +0000)
2012-04-13  Richard Guenther  <rguenther@suse.de>

PR c/52549
* c-typeck.c (pointer_diff): Remove bogus assert.

* gcc.dg/pr52549.c: New testcase.

From-SVN: r186408

gcc/ChangeLog
gcc/c-typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr52549.c [new file with mode: 0644]

index d161985b518b6a5a9d3c0eb683dc666b17e7e449..fdff5a7670732571b2ec83a18240a5a3a16adb93 100644 (file)
@@ -1,3 +1,8 @@
+2012-04-13  Richard Guenther  <rguenther@suse.de>
+
+       PR c/52549
+       * c-typeck.c (pointer_diff): Remove bogus assert.
+
 2012-04-13  Richard Guenther  <rguenther@suse.de>
 
        PR c/52862
index 9891348029c1b07b1114491a8f9a043b44fe995d..e7060e2c3d28ca808327ec0194df527e76a969fc 100644 (file)
@@ -3446,8 +3446,6 @@ pointer_diff (location_t loc, tree op0, tree op1)
   else
     con1 = op1;
 
-  gcc_assert (TREE_CODE (con0) != PLUS_EXPR
-             && TREE_CODE (con1) != PLUS_EXPR);
   if (TREE_CODE (con0) == POINTER_PLUS_EXPR)
     {
       lit0 = TREE_OPERAND (con0, 1);
index 23608c58065bafe606a8e70529a31fc226f0ea89..9abfbd3bded3dcdb5c69de0733cad89feb245291 100644 (file)
@@ -1,3 +1,8 @@
+2012-04-13  Richard Guenther  <rguenther@suse.de>
+
+       PR c/52549
+       * gcc.dg/pr52549.c: New testcase.
+
 2012-04-13  Richard Guenther  <rguenther@suse.de>
 
        PR c/52862
diff --git a/gcc/testsuite/gcc.dg/pr52549.c b/gcc/testsuite/gcc.dg/pr52549.c
new file mode 100644 (file)
index 0000000..89ec2aa
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+
+_mark (long obj, int i, char *a)
+{
+  (char *)&(((long *)(obj)) [i]) - a;
+}