summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/Warray-bounds-58.c
blob: 7bd6df2bf2e0539ae33596e8236d3e8f69a09cec (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/* { dg-do compile }
   { dg-options "-O2 -Wall" } */

typedef __SIZE_TYPE__ size_t;

extern size_t strlen (const char*);

void sink (size_t);

struct A0 { char i, a[0]; };

extern struct A0 ea0;

void fa0_extern (void)
{
  sink (strlen (ea0.a - 2));    // { dg-warning "\\\[-Warray-bounds" }
  sink (strlen (ea0.a - 1));    // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ea0.a));        // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ea0.a + 1));    // { dg-warning "\\\[-Warray-bounds" }
}

static struct A0 sa0 = { 0 };

void fa0_static (void)
{
  sink (strlen (sa0.a - 2));    // { dg-warning "\\\[-Warray-bounds" }
  sink (strlen (sa0.a - 1));    // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (sa0.a));        // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (sa0.a + 1));    // { dg-warning "\\\[-Warray-bounds" }
}


struct Ax { char i, a[]; };

extern struct Ax ax;

void fax_extern (void)
{
  sink (strlen (ax.a - 2));     // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ax.a - 1));     // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ax.a));
  sink (strlen (ax.a + 123));
}

static struct Ax ax0 = { 0, { 0 } };
static struct Ax ax1 = { 1, { 1, 0 } };
static struct Ax ax2 = { 2, { 2, 1, 0 } };
static struct Ax ax3 = { 3, { 3, 2, 1, 0 } };

void fax_static (void)
{
  sink (strlen (ax0.a - 2));    // { dg-warning "\\\[-Warray-bounds" }
  sink (strlen (ax0.a - 1));    // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ax0.a));
  sink (strlen (ax0.a + 1));    // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ax0.a + 2));    // { dg-warning "\\\[-Warray-bounds" }

  sink (strlen (ax1.a - 2));    // { dg-warning "\\\[-Warray-bounds" }
  sink (strlen (ax1.a - 1));    // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ax1.a));
  sink (strlen (ax1.a + 1));
  sink (strlen (ax1.a + 2));    // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ax1.a + 3));    // { dg-warning "\\\[-Warray-bounds" }

  sink (strlen (ax2.a - 2));    // { dg-warning "\\\[-Warray-bounds" }
  sink (strlen (ax2.a - 1));    // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ax2.a));
  sink (strlen (ax2.a + 1));
  sink (strlen (ax2.a + 2));
  sink (strlen (ax2.a + 3));    // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ax2.a + 4));    // { dg-warning "\\\[-Warray-bounds" }

  sink (strlen (ax3.a - 2));    // { dg-warning "\\\[-Warray-bounds" }
  sink (strlen (ax3.a - 1));    // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ax3.a));
  sink (strlen (ax3.a + 1));
  sink (strlen (ax3.a + 2));
  sink (strlen (ax3.a + 3));
  sink (strlen (ax3.a + 4));    // { dg-warning "\\\[-Warray-bounds" "pr93514" { xfail *-*-* } }
  sink (strlen (ax3.a + 5));    // { dg-warning "\\\[-Warray-bounds" }
}