/* APPLE LOCAL file 4229621 mainline */
/* Test whether strncmp has not been "optimized" into memcmp
   nor any code with memcmp semantics.  */
/* { dg-do run { target i?86-*-linux* x86_64-*-linux* ia64-*-linux* alpha*-*-linux* powerpc*-*-linux* s390*-*-linux* sparc*-*-linux* i?86-*-darwin* powerpc-*-darwin*} } */
/* { dg-options "-O2" } */
#include <sys/mman.h>
/* Darwin spells this differently */
#ifndef MAP_ANONYMOUS
#define MAP_ANONYMOUS MAP_ANON
#endif
#include <stdlib.h>

    struct Flags {
 int filler[18];
 unsigned int a:14;
 unsigned int b:14;
 unsigned int c:1;
 unsigned int d:1;
 unsigned int e:1;
 unsigned int f:1;
    };
static void __attribute__((noinline)) set (struct Flags *);
static void set (struct Flags *fp)
{
  fp->b = 5;
  fp->d = 1;
}

static int __attribute__((noinline)) bar (int);
static int bar(int x) { return !(x==1); }
int main (void)
{
  char *p = mmap (NULL, 131072, PROT_READ | PROT_WRITE,
                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
  struct Flags *fp;
  if (p == MAP_FAILED)
    return 0;
  if (munmap (p + 65536, 65536) < 0)
    return 0;
  fp = (struct Flags*)(p + 65536 - sizeof(struct Flags));
  set(fp);
  if (fp->b > 0)
    return (bar(fp->d));
  return 1;
}
