1 /* PR middle-end/103215 - bogus -Warray-bounds with two pointers with
3 Test for accesses into the same array through pointers with different
6 { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */
8 #define NOIPA __attribute__ ((noipa))
10 #define A(p, off) ((p)[off] = __COUNTER__)
15 NOIPA
void p0_p1 (int i
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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" }