view gcc/testsuite/g++.dg/tree-ssa/strlenopt-1.C @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
line wrap: on
line source

/* PR tree-optimization/92765 - wrong code for strcmp of a union member
   { dg-do run }
   { dg-options "-O2 -Wall" } */

typedef __SIZE_TYPE__ size_t;

inline void* operator new (size_t, void *p)
{
  return p;
}

struct A { char a2[2]; };
struct B { char a4[4]; };

__attribute__((noipa)) void
sink (void*) { }

__attribute__((noipa)) void
copy (char *d, const char *s)
{
  while ((*d++ = *s++));
}

__attribute__((noipa)) void
store_and_compare (void *p)
{
  A *a = new (p) A;
  sink (a->a2);

  B *b = new (p) B;
  char *q = (char *) b->a4;
  copy (q, "abc");

  if (__builtin_strcmp (q, "abc"))
    __builtin_abort ();
}

int main ()
{
  char a [sizeof (A) > sizeof (B) ? sizeof (A) : sizeof (B)];
  store_and_compare (a);
}