[gnu.gcc.bug] inconsistent warnings from gcc 1.35

andy@CSVAX.CALTECH.EDU (Andy Fyfe) (08/14/89)

With "gcc -Dx1 -c x.c", gcc gives 6 warnings about incompatible pointer
types for the lines so marked.  With "gcc -Dx2 -c x.c", it gives no
warnings at all.  (I don't see why gcc should give any warnings at all --
I don't understand why a leading "const" is bad (but only, apparently,
when more than single indirection is used) -- but rms assures me that
ansi says so.)

#ifdef x1
typedef char type;
#endif

#ifdef x2
typedef char *type;
#endif

zero(type q)
{
    const type p1 = q;

    /* can't modify p1 */
}

one(type *q)
{
    const type *p1 = q;
    type *const p2 = q;

    const type *const p = q;

    /* can't modify *p1, p2 */
}

two(type **q)
{
    const type **p1 = q;			   /* incompatible ptr types */
    type *const *p2 = q;
    type **const p3 = q;

    type *const *const p = q;
    const type *const *const r = q;		   /* incompatible ptr types */

    /* can't modify **p1, *p2, p3 */
}

three(type ***q)
{
    const type ***p1 = q;			   /* incompatible ptr types */
    type *const **p2 = q;
    type **const *p3 = q;
    type ***const p4 = q;

    type *const *const *const p = q;
    const type *const *const *const r = q;	   /* incompatible ptr types */

    /* can't modify ***p1, **p2, *p3, p4 */
}

four(type ****q)
{
    const type ****p1 = q;			   /* incompatible ptr types */
    type *const ***p2 = q;
    type **const **p3 = q;
    type ***const *p4 = q;
    type ****const p5 = q;

    type *const *const *const *const p = q;
    const type *const *const *const *const r = q;  /* incompatible ptr types */

    /* can't modify ****p1, ***p2, **p3, *p4, p5 */
}