David Shochat wrote:

On Jun 18, 2008, at 8:27 PM, walt wrote:

This is quoted from http://gcc.gnu.org/gcc-3.4/changes.html :

# The cast-as-lvalue extension has been removed for C++ and deprecated
for C and Objective-C. In particular, code like this:

char *p;
((int *) p)++;

is no longer accepted for C++ and will not be accepted for C and
Objective-C in a future version.

Unfortunately I don't know the proper fix, but I'm hoping I'll get an
answer to that question tomorrow in the gcc-help mailing list.

How about:

char *p;
...
int *q = (int *) p;
q++;
p = (char *) q;

That would have the same net effect and is accepted by gcc 4.2.3, which
does not accept the original construct.

Well, here is my first attempt at implementing your suggestion, but it
produces exactly the same compiler error as the original code.  Perhaps
in the morning when I'm more awake I'll do better.

--- pan/base/msort.c.orig       2001-06-18 11:33:38.000000000 -0700
+++ pan/base/msort.c    2008-06-18 20:19:08.000000000 -0700
@@ -43,6 +43,7 @@
        char *tmp;
        char *b1, *b2;
        size_t n1, n2;
+       unsigned long int *qtmp, *qb1, *qb2;
        const int opsiz = sizeof(unsigned long int);

        if (n <= 1)
@@ -65,14 +66,22 @@
                        if ((*cmp) (b1, b2) <= 0)
                        {
                                --n1;
-                               *((unsigned long int *) tmp)++ =
+                               *qtmp = *((unsigned long int *) b1)++;
+                               qtmp++;
+                               tmp = (char *)qtmp;
+/*                             *((unsigned long int *) tmp)++ =
                                        *((unsigned long int *) b1)++;
+*/
                        }
                        else
                        {
                                --n2;
-                               *((unsigned long int *) tmp)++ =
+                               *qtmp = *((unsigned long int *) b2)++;
+                               qtmp++;
+                               tmp = (char *)qtmp;
+/*                             *((unsigned long int *) tmp)++ =
                                        *((unsigned long int *) b2)++;
+*/
                        }
                }
        else


_______________________________________________
Pan-users mailing list
Pan-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/pan-users

Reply via email to