summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/pr78408-2.c
blob: 89c9b7eae435c093fd7d641d6fd9c5ddf65064c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* PR c/78408 */
/* { dg-do compile { target size32plus } } */
/* { dg-options "-O2 -fdump-tree-fab1-details" } */
/* { dg-final { scan-tree-dump-not "after previous" "fab1" } } */

struct S { char a[32]; };
struct T { char a[65536]; };
void bar (int, struct S *, struct S *, struct T *, struct T *);
void baz (char *, char *);

void
f1 (void)
{
  struct S a, b;
  struct T c, d;
  __builtin_memset (&b, 2, sizeof (b));
  a = b;
  __builtin_memset (&d, 3, sizeof (d));
  c = d;
  bar (3, &a, &b, &c, &d);
}

void
f2 (void)
{
  char a[64], b[64];
  __builtin_memset (a + 13, 2, 27);
  __builtin_memcpy (b + 4, a + 17, 24);
  baz (a, b);
}

void
f3 (void)
{
  char a[64], b[64];
  __builtin_memset (a + 13, 2, 27);
  __builtin_memcpy (b + 4, a + 12, 5);
  baz (a, b);
}