Require target lra in gcc.dg/pr108095.c
[official-gcc.git] / gcc / testsuite / gcc.dg / Warray-bounds-91.c
blob1c81091b2a60befa697278005276ac642c352b08
1 /* PR middle-end/103215 - bogus -Warray-bounds with two pointers with
2 different offsets each
3 Test for accesses into the same array through pointers with different
4 offsets each.
5 { dg-do compile }
6 { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */
8 #define NOIPA __attribute__ ((noipa))
10 #define A(p, off) ((p)[off] = __COUNTER__)
12 extern int a4[4];
15 NOIPA void p0_p1 (int i)
17 int *p0 = a4 + 0;
18 int *p1 = a4 + 1;
19 int *q = i ? p0 : p1;
20 A (q, -2); // { dg-warning "-Warray-bounds" }
21 A (q, -1); A (q, 0); A (q, 1); A (q, 2);
22 /* Since q points to a4 and -1 is a valid subscript, +3 must be invalid.
23 But the warning for each subscript is independent of prior subscripts
24 into the same object. That should be improved. */
25 A (q, 3); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
26 A (q, 4); // { dg-warning "-Warray-bounds" }
29 NOIPA void p1_p0 (int i)
31 int *p1 = a4 + 1;
32 int *p0 = a4 + 0;
33 int *q = i ? p0 : p1;
34 A (q, -2); // { dg-warning "-Warray-bounds" }
35 A (q, -1); A (q, 0); A (q, 1); A (q, 2);
36 A (q, 3); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
37 A (q, 4); // { dg-warning "-Warray-bounds" }
41 NOIPA void p1_p2 (int i)
43 int *p1 = a4 + 1;
44 int *p2 = a4 + 2;
45 int *q = i ? p1 : p2;
46 A (q, -3); // { dg-warning "-Warray-bounds" }
47 A (q, -2); A (q, -1); A (q, 0); A (q, 1);
48 A (q, 2); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
49 A (q, 3); // { dg-warning "-Warray-bounds" }
52 NOIPA void p2_p1 (int i)
54 int *p2 = a4 + 2;
55 int *p1 = a4 + 1;
56 int *q = i ? p1 : p2;
57 A (q, -3); // { dg-warning "-Warray-bounds" }
58 A (q, -2); A (q, -1); A (q, 0); A (q, 1);
59 A (q, 2); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
60 A (q, 3); // { dg-warning "-Warray-bounds" }
64 NOIPA void p1_p3 (int i)
66 int *p1 = a4 + 1;
67 int *p3 = a4 + 3;
68 int *q = i ? p1 : p3;
69 A (q, -4); // { dg-warning "-Warray-bounds" }
70 A (q, -3); A (q, -2); A (q, -1); A (q, 0);
71 A (q, 1); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
72 A (q, 2); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
73 A (q, 3); // { dg-warning "-Warray-bounds" }
76 NOIPA void p3_p1 (int i)
78 int *p3 = a4 + 3;
79 int *p1 = a4 + 1;
80 int *q = i ? p1 : p3;
81 A (q, -4); // { dg-warning "-Warray-bounds" }
82 A (q, -3); A (q, -2); A (q, -1); A (q, 0);
83 A (q, 1); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
84 A (q, 2); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
85 A (q, 3); // { dg-warning "-Warray-bounds" }
89 NOIPA void p1_p4 (int i)
91 int *p1 = a4 + 1;
92 int *p4 = a4 + 4;
93 int *q = i ? p1 : p4;
94 A (q, -5); // { dg-warning "-Warray-bounds" }
95 A (q, -4); A (q, -3); A (q, -2); A (q, -1);
96 A (q, 0); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
97 A (q, 1); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
98 A (q, 2); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
99 A (q, 3); // { dg-warning "-Warray-bounds" }
102 NOIPA void p4_p1 (int i)
104 int *p4 = a4 + 4;
105 int *p1 = a4 + 1;
106 int *q = i ? p1 : p4;
107 A (q, -5); // { dg-warning "-Warray-bounds" }
108 A (q, -4); A (q, -3); A (q, -2); A (q, -1);
109 A (q, 0); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
110 A (q, 1); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
111 A (q, 2); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
112 A (q, 3); // { dg-warning "-Warray-bounds" }
116 NOIPA void p0_p1_p2 (int i)
118 int *p0 = a4 + 0;
119 int *p1 = a4 + 1;
120 int *p2 = a4 + 2;
121 int *q = i < 0 ? p1 : 0 < i ? p2 : p0;
122 A (q, -3); // { dg-warning "-Warray-bounds" }
123 A (q, -2); A (q, -1); A (q, 0); A (q, 1);
124 A (q, 2); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
125 A (q, 3); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
126 A (q, 4); // { dg-warning "-Warray-bounds" }
130 NOIPA void p0_p1_p2_p3_p4 (int i)
132 int *p0 = a4 + 0;
133 int *p1 = a4 + 1;
134 int *p2 = a4 + 2;
135 int *p3 = a4 + 3;
136 int *p4 = a4 + 4;
137 int *q = i < -1 ? p1 : i < 0 ? p2 : 1 < i ? p4 : 0 < i ? p3 : p0;
138 A (q, -5); // { dg-warning "-Warray-bounds" }
139 A (q, -4); A (q, -3); A (q, -2); A (q, -1);
140 A (q, 0); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
141 A (q, 1); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
142 A (q, 2); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
143 A (q, 3); // { dg-warning "-Warray-bounds" "pr??????" { xfail *-*-* } }
144 A (q, 4); // { dg-warning "-Warray-bounds" }