summaryrefslogtreecommitdiff
path: root/gcc/testsuite/c-c++-common/ubsan/null-13.c
blob: 59e0429490c7fd7707baa823bca7a636aad1d8ba (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
/* { dg-do run } */
/* { dg-options "-fsanitize=null -fno-sanitize-recover=null -w" } */
/* { dg-shouldfail "ubsan" } */

struct S {
  int i;
  long long j;
  long long m;
};
union U {
  int k;
  struct S l;
};

__attribute__((noinline, noclone)) int
foo (struct S s)
{
  return s.i + s.j + s.m;
}

__attribute__((noinline, noclone)) int
bar (union U *u)
{
  foo (u->l);
}

union U v;

int
main (void)
{
  union U *u = 0;
  asm volatile ("" : "+r" (u) : "r" (&v) : "memory");
  return bar (u);
}

/* { dg-output "member access within null pointer of type 'union U'" } */