/* Test -Wsizeof-pointer-memaccess warnings.  */
/* { dg-do compile } */
/* { dg-options "-Wall -Wno-array-bounds -Wno-sizeof-array-argument -Wno-stringop-overflow -Wno-stringop-overread" } */
/* { dg-require-effective-target alloca } */

typedef __SIZE_TYPE__ size_t;
extern void bzero (void *, size_t);
extern void bcopy (void *, const void *, size_t);
extern int bcmp (const void *, const void *, size_t);

struct A { short a, b; int c, d; long e, f; };
typedef struct A TA;
typedef struct A *PA;
typedef TA *PTA;
struct B {};
typedef struct B TB;
typedef struct B *PB;
typedef TB *PTB;
typedef int X[3][3][3];

int
f1 (void *x, int z)
{
  struct A a, *pa1 = &a;
  TA *pa2 = &a;
  PA pa3 = &a;
  PTA pa4 = &a;
  bzero (&a, sizeof (&a));		    /* { dg-warning "call is the same expression as the destination; did you mean to remove the addressof" } */
  bzero (pa1, sizeof (pa1));		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bzero (pa2, sizeof pa2);		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bzero (pa3, sizeof (pa3));		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bzero (pa4, sizeof pa4);		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bzero (pa1, sizeof (struct A *));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bzero (pa2, sizeof (PTA));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bzero (pa3, sizeof (PA));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bzero (pa4, sizeof (__typeof (pa4)));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */

  bcopy (x, &a, sizeof (&a));		    /* { dg-warning "call is the same expression as the destination; did you mean to remove the addressof" } */
  bcopy (x, pa1, sizeof (pa1));		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bcopy (x, pa2, sizeof pa2);		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bcopy (x, pa3, sizeof (pa3));		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bcopy (x, pa4, sizeof pa4);		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bcopy (x, pa1, sizeof (struct A *));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bcopy (x, pa2, sizeof (PTA));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bcopy (x, pa3, sizeof (PA));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bcopy (x, pa4, sizeof (__typeof (pa4)));  /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */

  bcopy (&a, x, sizeof (&a));		    /* { dg-warning "call is the same expression as the source; did you mean to remove the addressof" } */
  bcopy (pa1, x, sizeof (pa1));		    /* { dg-warning "call is the same expression as the source; did you mean to dereference it" } */
  bcopy (pa2, x, sizeof pa2);		    /* { dg-warning "call is the same expression as the source; did you mean to dereference it" } */
  bcopy (pa3, x, sizeof (pa3));		    /* { dg-warning "call is the same expression as the source; did you mean to dereference it" } */
  bcopy (pa4, x, sizeof pa4);		    /* { dg-warning "call is the same expression as the source; did you mean to dereference it" } */
  bcopy (pa1, x, sizeof (struct A *));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the source; expected \[^\n\r\]* or an explicit length" } */
  bcopy (pa2, x, sizeof (PTA));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the source; expected \[^\n\r\]* or an explicit length" } */
  bcopy (pa3, x, sizeof (PA));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the source; expected \[^\n\r\]* or an explicit length" } */
  bcopy (pa4, x, sizeof (__typeof (pa4)));  /* { dg-warning "call is the same pointer type \[^\n\r\]* as the source; expected \[^\n\r\]* or an explicit length" } */

  z += bcmp (&a, x, sizeof (&a));	    /* { dg-warning "call is the same expression as the first source; did you mean to remove the addressof" } */
  z += bcmp (pa1, x, sizeof (pa1));	    /* { dg-warning "call is the same expression as the first source; did you mean to dereference it" } */
  z += bcmp (pa2, x, sizeof pa2);	    /* { dg-warning "call is the same expression as the first source; did you mean to dereference it" } */
  z += bcmp (pa3, x, sizeof (pa3));	    /* { dg-warning "call is the same expression as the first source; did you mean to dereference it" } */
  z += bcmp (pa4, x, sizeof pa4);	    /* { dg-warning "call is the same expression as the first source; did you mean to dereference it" } */
  z += bcmp (pa1, x, sizeof (struct A *));  /* { dg-warning "call is the same pointer type \[^\n\r\]* as the first source; expected \[^\n\r\]* or an explicit length" } */
  z += bcmp (pa2, x, sizeof (PTA));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the first source; expected \[^\n\r\]* or an explicit length" } */
  z += bcmp (pa3, x, sizeof (PA));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the first source; expected \[^\n\r\]* or an explicit length" } */

  z += bcmp (x, &a, sizeof (&a));	    /* { dg-warning "call is the same expression as the second source; did you mean to remove the addressof" } */
  z += bcmp (x, pa1, sizeof (pa1));	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, pa2, sizeof pa2);	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, pa3, sizeof (pa3));	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, pa4, sizeof pa4);	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, pa1, sizeof (struct A *));  /* { dg-warning "call is the same pointer type \[^\n\r\]* as the second source; expected \[^\n\r\]* or an explicit length" } */
  z += bcmp (x, pa2, sizeof (PTA));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the second source; expected \[^\n\r\]* or an explicit length" } */
  z += bcmp (x, pa3, sizeof (PA));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the second source; expected \[^\n\r\]* or an explicit length" } */

  z += bcmp (x, (&a), (sizeof (&a)));	    /* { dg-warning "call is the same expression as the second source; did you mean to remove the addressof" } */
  z += bcmp (x, (pa1), (sizeof (pa1)));	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, (pa2), (sizeof pa2));	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, (pa3), (sizeof (pa3)));	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, (pa4), (sizeof pa4));	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, (pa1), (sizeof (struct A *)));/* { dg-warning "call is the same pointer type \[^\n\r\]* as the second source; expected \[^\n\r\]* or an explicit length" } */
  z += bcmp (x, (pa2), (sizeof (PTA)));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the second source; expected \[^\n\r\]* or an explicit length" } */
  z += bcmp (x, (pa3), (sizeof (PA)));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the second source; expected \[^\n\r\]* or an explicit length" } */

  /* These are correct, no warning.  */
  bzero (&a, sizeof a);
  bzero (&a, sizeof (a));
  bzero (&a, sizeof (struct A));
  bzero (&a, sizeof (const struct A));
  bzero (&a, sizeof (volatile struct A));
  bzero (&a, sizeof (volatile const struct A));
  bzero (&a, sizeof (TA));
  bzero (&a, sizeof (__typeof (*&a)));
  bzero (pa1, sizeof (*pa1));
  bzero (pa2, sizeof (*pa3));
  bzero (pa3, sizeof (__typeof (*pa3)));
  /* These are probably broken, but obfuscated, no warning.  */
  bzero ((void *) &a, sizeof (&a));
  bzero ((char *) &a, sizeof (&a));
  bzero (&a, sizeof (&a) + 0);
  bzero (&a, 0 + sizeof (&a));

  /* These are correct, no warning.  */
  bcopy (x, &a, sizeof a);
  bcopy (x, &a, sizeof (a));
  bcopy (x, &a, sizeof (struct A));
  bcopy (x, &a, sizeof (const struct A));
  bcopy (x, &a, sizeof (volatile struct A));
  bcopy (x, &a, sizeof (volatile const struct A));
  bcopy (x, &a, sizeof (TA));
  bcopy (x, &a, sizeof (__typeof (*&a)));
  bcopy (x, pa1, sizeof (*pa1));
  bcopy (x, pa2, sizeof (*pa3));
  bcopy (x, pa3, sizeof (__typeof (*pa3)));
  /* These are probably broken, but obfuscated, no warning.  */
  bcopy (x, (void *) &a, sizeof (&a));
  bcopy (x, (char *) &a, sizeof (&a));
  bcopy (x, &a, sizeof (&a) + 0);
  bcopy (x, &a, 0 + sizeof (&a));

  /* These are correct, no warning.  */
  bcopy (&a, x, sizeof a);
  bcopy (&a, x, sizeof (a));
  bcopy (&a, x, sizeof (struct A));
  bcopy (&a, x, sizeof (const struct A));
  bcopy (&a, x, sizeof (volatile struct A));
  bcopy (&a, x, sizeof (volatile const struct A));
  bcopy (&a, x, sizeof (TA));
  bcopy (&a, x, sizeof (__typeof (*&a)));
  bcopy (pa1, x, sizeof (*pa1));
  bcopy (pa2, x, sizeof (*pa3));
  bcopy (pa3, x, sizeof (__typeof (*pa3)));
  /* These are probably broken, but obfuscated, no warning.  */
  bcopy ((void *) &a, x, sizeof (&a));
  bcopy ((char *) &a, x, sizeof (&a));
  bcopy (&a, x, sizeof (&a) + 0);
  bcopy (&a, x, 0 + sizeof (&a));

  /* These are correct, no warning.  */
  z += bcmp (&a, x, sizeof a);
  z += bcmp (&a, x, sizeof (a));
  z += bcmp (&a, x, sizeof (struct A));
  z += bcmp (&a, x, sizeof (const struct A));
  z += bcmp (&a, x, sizeof (volatile struct A));
  z += bcmp (&a, x, sizeof (volatile const struct A));
  z += bcmp (&a, x, sizeof (TA));
  z += bcmp (&a, x, sizeof (__typeof (*&a)));
  z += bcmp (pa1, x, sizeof (*pa1));
  z += bcmp (pa2, x, sizeof (*pa3));
  z += bcmp (pa3, x, sizeof (__typeof (*pa3)));
  /* These are probably broken, but obfuscated, no warning.  */
  z += bcmp ((void *) &a, x, sizeof (&a));
  z += bcmp ((char *) &a, x, sizeof (&a));
  z += bcmp (&a, x, sizeof (&a) + 0);
  z += bcmp (&a, x, 0 + sizeof (&a));

  /* These are correct, no warning.  */
  z += bcmp (x, &a, sizeof a);
  z += bcmp (x, &a, sizeof (a));
  z += bcmp (x, &a, sizeof (struct A));
  z += bcmp (x, &a, sizeof (const struct A));
  z += bcmp (x, &a, sizeof (volatile struct A));
  z += bcmp (x, &a, sizeof (volatile const struct A));
  z += bcmp (x, &a, sizeof (TA));
  z += bcmp (x, &a, sizeof (__typeof (*&a)));
  z += bcmp (x, pa1, sizeof (*pa1));
  z += bcmp (x, pa2, sizeof (*pa3));
  z += bcmp (x, pa3, sizeof (__typeof (*pa3)));
  /* These are probably broken, but obfuscated, no warning.  */
  z += bcmp (x, (void *) &a, sizeof (&a));
  z += bcmp (x, (char *) &a, sizeof (&a));
  z += bcmp (x, &a, sizeof (&a) + 0);
  z += bcmp (x, &a, 0 + sizeof (&a));

  return z;
}

int
f2 (void *x, int z)
{
  struct B b, *pb1 = &b;
  TB *pb2 = &b;
  PB pb3 = &b;
  PTB pb4 = &b;
  bzero (&b, sizeof (&b));		    /* { dg-warning "call is the same expression as the destination; did you mean to remove the addressof" } */
  bzero (pb1, sizeof (pb1));		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bzero (pb2, sizeof pb2);		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bzero (pb3, sizeof (pb3));		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bzero (pb4, sizeof pb4);		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bzero (pb1, sizeof (struct B *));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bzero (pb2, sizeof (PTB));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bzero (pb3, sizeof (PB));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bzero (pb4, sizeof (__typeof (pb4)));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */

  bcopy (x, &b, sizeof (&b));		    /* { dg-warning "call is the same expression as the destination; did you mean to remove the addressof" } */
  bcopy (x, pb1, sizeof (pb1));		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bcopy (x, pb2, sizeof pb2);		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bcopy (x, pb3, sizeof (pb3));		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bcopy (x, pb4, sizeof pb4);		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */
  bcopy (x, pb1, sizeof (struct B *));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bcopy (x, pb2, sizeof (PTB));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bcopy (x, pb3, sizeof (PB));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */
  bcopy (x, pb4, sizeof (__typeof (pb4)));  /* { dg-warning "call is the same pointer type \[^\n\r\]* as the destination; expected \[^\n\r\]* or an explicit length" } */

  bcopy (&b, x, sizeof (&b));		    /* { dg-warning "call is the same expression as the source; did you mean to remove the addressof" } */
  bcopy (pb1, x, sizeof (pb1));		    /* { dg-warning "call is the same expression as the source; did you mean to dereference it" } */
  bcopy (pb2, x, sizeof pb2);		    /* { dg-warning "call is the same expression as the source; did you mean to dereference it" } */
  bcopy (pb3, x, sizeof (pb3));		    /* { dg-warning "call is the same expression as the source; did you mean to dereference it" } */
  bcopy (pb4, x, sizeof pb4);		    /* { dg-warning "call is the same expression as the source; did you mean to dereference it" } */
  bcopy (pb1, x, sizeof (struct B *));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the source; expected \[^\n\r\]* or an explicit length" } */
  bcopy (pb2, x, sizeof (PTB));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the source; expected \[^\n\r\]* or an explicit length" } */
  bcopy (pb3, x, sizeof (PB));		    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the source; expected \[^\n\r\]* or an explicit length" } */
  bcopy (pb4, x, sizeof (__typeof (pb4)));  /* { dg-warning "call is the same pointer type \[^\n\r\]* as the source; expected \[^\n\r\]* or an explicit length" } */

  z += bcmp (&b, x, sizeof (&b));	    /* { dg-warning "call is the same expression as the first source; did you mean to remove the addressof" } */
  z += bcmp (pb1, x, sizeof (pb1));	    /* { dg-warning "call is the same expression as the first source; did you mean to dereference it" } */
  z += bcmp (pb2, x, sizeof pb2);	    /* { dg-warning "call is the same expression as the first source; did you mean to dereference it" } */
  z += bcmp (pb3, x, sizeof (pb3));	    /* { dg-warning "call is the same expression as the first source; did you mean to dereference it" } */
  z += bcmp (pb4, x, sizeof pb4);	    /* { dg-warning "call is the same expression as the first source; did you mean to dereference it" } */
  z += bcmp (pb1, x, sizeof (struct B *));  /* { dg-warning "call is the same pointer type \[^\n\r\]* as the first source; expected \[^\n\r\]* or an explicit length" } */
  z += bcmp (pb2, x, sizeof (PTB));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the first source; expected \[^\n\r\]* or an explicit length" } */
  z += bcmp (pb3, x, sizeof (PB));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the first source; expected \[^\n\r\]* or an explicit length" } */

  z += bcmp (x, &b, sizeof (&b));	    /* { dg-warning "call is the same expression as the second source; did you mean to remove the addressof" } */
  z += bcmp (x, pb1, sizeof (pb1));	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, pb2, sizeof pb2);	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, pb3, sizeof (pb3));	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, pb4, sizeof pb4);	    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */
  z += bcmp (x, pb1, sizeof (struct B *));  /* { dg-warning "call is the same pointer type \[^\n\r\]* as the second source; expected \[^\n\r\]* or an explicit length" } */
  z += bcmp (x, pb2, sizeof (PTB));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the second source; expected \[^\n\r\]* or an explicit length" } */
  z += bcmp (x, pb3, sizeof (PB));	    /* { dg-warning "call is the same pointer type \[^\n\r\]* as the second source; expected \[^\n\r\]* or an explicit length" } */

  /* These are correct, no warning.  */
  bzero (&b, sizeof b);
  bzero (&b, sizeof (b));
  bzero (&b, sizeof (struct B));
  bzero (&b, sizeof (const struct B));
  bzero (&b, sizeof (volatile struct B));
  bzero (&b, sizeof (volatile const struct B));
  bzero (&b, sizeof (TB));
  bzero (&b, sizeof (__typeof (*&b)));
  bzero (pb1, sizeof (*pb1));
  bzero (pb2, sizeof (*pb3));
  bzero (pb3, sizeof (__typeof (*pb3)));
  /* These are probably broken, but obfuscated, no warning.  */
  bzero ((void *) &b, sizeof (&b));
  bzero ((char *) &b, sizeof (&b));
  bzero (&b, sizeof (&b) + 0);
  bzero (&b, 0 + sizeof (&b));

  /* These are correct, no warning.  */
  bcopy (x, &b, sizeof b);
  bcopy (x, &b, sizeof (b));
  bcopy (x, &b, sizeof (struct B));
  bcopy (x, &b, sizeof (const struct B));
  bcopy (x, &b, sizeof (volatile struct B));
  bcopy (x, &b, sizeof (volatile const struct B));
  bcopy (x, &b, sizeof (TB));
  bcopy (x, &b, sizeof (__typeof (*&b)));
  bcopy (x, pb1, sizeof (*pb1));
  bcopy (x, pb2, sizeof (*pb3));
  bcopy (x, pb3, sizeof (__typeof (*pb3)));
  /* These are probably broken, but obfuscated, no warning.  */
  bcopy (x, (void *) &b, sizeof (&b));
  bcopy (x, (char *) &b, sizeof (&b));
  bcopy (x, &b, sizeof (&b) + 0);
  bcopy (x, &b, 0 + sizeof (&b));

  /* These are correct, no warning.  */
  bcopy (&b, x, sizeof b);
  bcopy (&b, x, sizeof (b));
  bcopy (&b, x, sizeof (struct B));
  bcopy (&b, x, sizeof (const struct B));
  bcopy (&b, x, sizeof (volatile struct B));
  bcopy (&b, x, sizeof (volatile const struct B));
  bcopy (&b, x, sizeof (TB));
  bcopy (&b, x, sizeof (__typeof (*&b)));
  bcopy (pb1, x, sizeof (*pb1));
  bcopy (pb2, x, sizeof (*pb3));
  bcopy (pb3, x, sizeof (__typeof (*pb3)));
  /* These are probably broken, but obfuscated, no warning.  */
  bcopy ((void *) &b, x, sizeof (&b));
  bcopy ((char *) &b, x, sizeof (&b));
  bcopy (&b, x, sizeof (&b) + 0);
  bcopy (&b, x, 0 + sizeof (&b));

  /* These are correct, no warning.  */
  z += bcmp (&b, x, sizeof b);
  z += bcmp (&b, x, sizeof (b));
  z += bcmp (&b, x, sizeof (struct B));
  z += bcmp (&b, x, sizeof (const struct B));
  z += bcmp (&b, x, sizeof (volatile struct B));
  z += bcmp (&b, x, sizeof (volatile const struct B));
  z += bcmp (&b, x, sizeof (TB));
  z += bcmp (&b, x, sizeof (__typeof (*&b)));
  z += bcmp (pb1, x, sizeof (*pb1));
  z += bcmp (pb2, x, sizeof (*pb3));
  z += bcmp (pb3, x, sizeof (__typeof (*pb3)));
  /* These are probably broken, but obfuscated, no warning.  */
  z += bcmp ((void *) &b, x, sizeof (&b));
  z += bcmp ((char *) &b, x, sizeof (&b));
  z += bcmp (&b, x, sizeof (&b) + 0);
  z += bcmp (&b, x, 0 + sizeof (&b));

  /* These are correct, no warning.  */
  z += bcmp (x, &b, sizeof b);
  z += bcmp (x, &b, sizeof (b));
  z += bcmp (x, &b, sizeof (struct B));
  z += bcmp (x, &b, sizeof (const struct B));
  z += bcmp (x, &b, sizeof (volatile struct B));
  z += bcmp (x, &b, sizeof (volatile const struct B));
  z += bcmp (x, &b, sizeof (TB));
  z += bcmp (x, &b, sizeof (__typeof (*&b)));
  z += bcmp (x, pb1, sizeof (*pb1));
  z += bcmp (x, pb2, sizeof (*pb3));
  z += bcmp (x, pb3, sizeof (__typeof (*pb3)));
  /* These are probably broken, but obfuscated, no warning.  */
  z += bcmp (x, (void *) &b, sizeof (&b));
  z += bcmp (x, (char *) &b, sizeof (&b));
  z += bcmp (x, &b, sizeof (&b) + 0);
  z += bcmp (x, &b, 0 + sizeof (&b));

  return z;
}

int
f3 (void *x, char *y, int z, X w)
{
  unsigned char *y1 = (unsigned char *) __builtin_alloca (z + 16);
  char buf1[7];
  signed char buf2[z + 32];
  long buf3[17];
  int *buf4[9];
  signed char *y2 = buf2;
  char c;
  char *y3;
  bzero (y, sizeof (y));		    /* { dg-warning "call is the same expression as the destination; did you mean to provide an explicit length" } */
  bzero (y1, sizeof (y1));		    /* { dg-warning "call is the same expression as the destination; did you mean to provide an explicit length" } */
  bzero (y2, sizeof (y2));		    /* { dg-warning "call is the same expression as the destination; did you mean to provide an explicit length" } */
  bzero (&c, sizeof (&c));		    /* { dg-warning "call is the same expression as the destination; did you mean to remove the addressof" } */
  bzero (w, sizeof w);			    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */

  bcopy (x, y, sizeof (y));		    /* { dg-warning "call is the same expression as the destination; did you mean to provide an explicit length" } */
  bcopy (x, y1, sizeof (y1));		    /* { dg-warning "call is the same expression as the destination; did you mean to provide an explicit length" } */
  bcopy (x, y2, sizeof (y2));		    /* { dg-warning "call is the same expression as the destination; did you mean to provide an explicit length" } */
  bcopy (x, &c, sizeof (&c));		    /* { dg-warning "call is the same expression as the destination; did you mean to remove the addressof" } */
  bcopy (x, w, sizeof w);		    /* { dg-warning "call is the same expression as the destination; did you mean to dereference it" } */

  bcopy (y, x, sizeof (y));		    /* { dg-warning "call is the same expression as the source; did you mean to provide an explicit length" } */
  bcopy (y1, x, sizeof (y1));		    /* { dg-warning "call is the same expression as the source; did you mean to provide an explicit length" } */
  bcopy (y2, x, sizeof (y2));		    /* { dg-warning "call is the same expression as the source; did you mean to provide an explicit length" } */
  bcopy (&c, x, sizeof (&c));		    /* { dg-warning "call is the same expression as the source; did you mean to remove the addressof" } */
  bcopy (w, x, sizeof w);		    /* { dg-warning "call is the same expression as the source; did you mean to dereference it" } */

  z += bcmp (y, x, sizeof (y));		    /* { dg-warning "call is the same expression as the first source; did you mean to provide an explicit length" } */
  z += bcmp (y1, x, sizeof (y1));	    /* { dg-warning "call is the same expression as the first source; did you mean to provide an explicit length" } */
  z += bcmp (y2, x, sizeof (y2));	    /* { dg-warning "call is the same expression as the first source; did you mean to provide an explicit length" } */
  z += bcmp (&c, x, sizeof (&c));	    /* { dg-warning "call is the same expression as the first source; did you mean to remove the addressof" } */
  z += bcmp (w, x, sizeof w);		    /* { dg-warning "call is the same expression as the first source; did you mean to dereference it" } */

  z += bcmp (x, y, sizeof (y));		    /* { dg-warning "call is the same expression as the second source; did you mean to provide an explicit length" } */
  z += bcmp (x, y1, sizeof (y1));	    /* { dg-warning "call is the same expression as the second source; did you mean to provide an explicit length" } */
  z += bcmp (x, y2, sizeof (y2));	    /* { dg-warning "call is the same expression as the second source; did you mean to provide an explicit length" } */
  z += bcmp (x, &c, sizeof (&c));	    /* { dg-warning "call is the same expression as the second source; did you mean to remove the addressof" } */
  z += bcmp (x, w, sizeof w);		    /* { dg-warning "call is the same expression as the second source; did you mean to dereference it" } */

  /* These are correct, no warning.  */
  bzero (y, sizeof (*y));
  bzero (y1, sizeof (*y2));
  bzero (buf1, sizeof buf1);
  bzero (buf3, sizeof (buf3));
  bzero (&buf3[0], sizeof (buf3));
  bzero (&buf4[0], sizeof (buf4));
  bzero (w, sizeof (X));
  /* These are probably broken, but obfuscated, no warning.  */
  bzero ((void *) y, sizeof (y));
  bzero ((char *) y1, sizeof (y2));
  bzero (y, sizeof (y) + 0);
  bzero (y1, 0 + sizeof (y2));
  bzero ((void *) &c, sizeof (&c));
  bzero ((signed char *) &c, sizeof (&c));
  bzero (&c, sizeof (&c) + 0);
  bzero (&c, 0 + sizeof (&c));

  /* These are correct, no warning.  */
  bcopy (x, y, sizeof (*y));
  bcopy (x, y1, sizeof (*y2));
  bcopy (x, buf1, sizeof buf1);
  bcopy (x, buf3, sizeof (buf3));
  bcopy (x, &buf3[0], sizeof (buf3));
  bcopy (x, &buf4[0], sizeof (buf4));
  bcopy (y, &y3, sizeof (y3));
  bcopy (y, (char *) &y3, sizeof (y3));
  bcopy (x, w, sizeof (X));
  /* These are probably broken, but obfuscated, no warning.  */
  bcopy (x, (void *) y, sizeof (y));
  bcopy (x, (char *) y1, sizeof (y2));
  bcopy (x, y, sizeof (y) + 0);
  bcopy (x, y1, 0 + sizeof (y2));
  bcopy (x, (void *) &c, sizeof (&c));
  bcopy (x, (signed char *) &c, sizeof (&c));
  bcopy (x, &c, sizeof (&c) + 0);
  bcopy (x, &c, 0 + sizeof (&c));

  /* These are correct, no warning.  */
  bcopy (y, x, sizeof (*y));
  bcopy (y1, x, sizeof (*y2));
  bcopy (buf1, x, sizeof buf1);
  bcopy (buf3, x, sizeof (buf3));
  bcopy (&buf3[0], x, sizeof (buf3));
  bcopy (&buf4[0], x, sizeof (buf4));
  bcopy (&y3, y, sizeof (y3));
  bcopy ((char *) &y3, y, sizeof (y3));
  bcopy (w, x, sizeof (X));
  /* These are probably broken, but obfuscated, no warning.  */
  bcopy ((void *) y, x, sizeof (y));
  bcopy ((char *) y1, x, sizeof (y2));
  bcopy (y, x, sizeof (y) + 0);
  bcopy (y1, x, 0 + sizeof (y2));
  bcopy ((void *) &c, x, sizeof (&c));
  bcopy ((signed char *) &c, x, sizeof (&c));
  bcopy (&c, x, sizeof (&c) + 0);
  bcopy (&c, x, 0 + sizeof (&c));

  /* These are correct, no warning.  */
  z += bcmp (y, x, sizeof (*y));
  z += bcmp (y1, x, sizeof (*y2));
  z += bcmp (buf1, x, sizeof buf1);
  z += bcmp (buf3, x, sizeof (buf3));
  z += bcmp (&buf3[0], x, sizeof (buf3));
  z += bcmp (&buf4[0], x, sizeof (buf4));
  z += bcmp (&y3, y, sizeof (y3));
  z += bcmp ((char *) &y3, y, sizeof (y3));
  z += bcmp (w, x, sizeof (X));
  /* These are probably broken, but obfuscated, no warning.  */
  z += bcmp ((void *) y, x, sizeof (y));
  z += bcmp ((char *) y1, x, sizeof (y2));
  z += bcmp (y, x, sizeof (y) + 0);
  z += bcmp (y1, x, 0 + sizeof (y2));
  z += bcmp ((void *) &c, x, sizeof (&c));
  z += bcmp ((signed char *) &c, x, sizeof (&c));
  z += bcmp (&c, x, sizeof (&c) + 0);
  z += bcmp (&c, x, 0 + sizeof (&c));

  /* These are correct, no warning.  */
  z += bcmp (x, y, sizeof (*y));
  z += bcmp (x, y1, sizeof (*y2));
  z += bcmp (x, buf1, sizeof buf1);
  z += bcmp (x, buf3, sizeof (buf3));
  z += bcmp (x, &buf3[0], sizeof (buf3));
  z += bcmp (x, &buf4[0], sizeof (buf4));
  z += bcmp (y, &y3, sizeof (y3));
  z += bcmp (y, (char *) &y3, sizeof (y3));
  z += bcmp (x, w, sizeof (X));
  /* These are probably broken, but obfuscated, no warning.  */
  z += bcmp (x, (void *) y, sizeof (y));
  z += bcmp (x, (char *) y1, sizeof (y2));
  z += bcmp (x, y, sizeof (y) + 0);
  z += bcmp (x, y1, 0 + sizeof (y2));
  z += bcmp (x, (void *) &c, sizeof (&c));
  z += bcmp (x, (signed char *) &c, sizeof (&c));
  z += bcmp (x, &c, sizeof (&c) + 0);
  z += bcmp (x, &c, 0 + sizeof (&c));

  return z;
}
