1 /* PR c/71924 - missing -Wreturn-local-addr returning alloca result
3 { dg-options "-O2 -Wall" }
4 { dg-require-effective-target alloca } */
6 #define ATTR(...) __attribute__ ((__VA_ARGS__))
8 struct A
{ int a
, b
, c
; };
9 struct B
{ int a
, b
, c
[]; };
11 extern int g1
[5], g2
[5], g3
[5], g4
[5], g5
[5];
13 void sink (void*, ...);
16 return_2_locals (int i
)
18 int a
[1]; /* { dg-message "declared here" } */
19 int b
[2]; /* { dg-message "declared here" } */
26 return p
; /* { dg-warning "function returns address of local" } */
30 return_2_locals_after_2_globals (int i
, int j
)
32 int a
[1]; /* { dg-message "declared here" } */
33 int b
[2]; /* { dg-message "declared here" } */
50 return p
; /* { dg-warning "function returns address of local" } */
54 return_3_locals (int i
)
56 int a
[1]; /* { dg-message "declared here" } */
57 int b
[2]; /* { dg-message "declared here" } */
58 int c
[3]; /* { dg-message "declared here" } */
68 return p
; /* { dg-warning "function returns address of local" } */
72 return_5_locals (int i
)
74 int a
[1]; /* { dg-message "declared here" } */
75 int b
[2]; /* { dg-message "declared here" } */
76 int c
[3]; /* { dg-message "declared here" } */
77 int d
[4]; /* { dg-message "declared here" } */
78 int e
[5]; /* { dg-message "declared here" } */
92 return p
; /* { dg-warning "function returns address of local" } */
96 return_5_locals_switch (int i
)
98 int a
[1]; /* { dg-message "declared here" } */
99 int b
[2]; /* { dg-message "declared here" } */
100 int c
[3]; /* { dg-message "declared here" } */
101 int d
[4]; /* { dg-message "declared here" } */
102 int e
[5]; /* { dg-message "declared here" } */
108 case 0: p
= &a
[1]; break;
109 case 1: p
= &b
[2]; break;
110 case 2: p
= &c
[3]; break;
111 case 3: p
= &d
[4]; break;
112 default: p
= &e
[5]; break;
117 return p
; /* { dg-warning "function returns address of local" } */
121 return_1_global_4_locals (int i
)
123 int a
[1]; /* { dg-message "declared here" } */
124 int b
[2]; /* { dg-message "declared here" } */
125 int c
[3]; /* { dg-message "declared here" } */
126 int d
[4]; /* { dg-message "declared here" } */
138 sink (p
, a
, b
, c
, d
);
140 return p
; /* { dg-warning "function may return address of local" } */
144 return_1_global_4_locals_switch (int i
)
146 int a
[1]; /* { dg-message "declared here" } */
147 int b
[2]; /* { dg-message "declared here" } */
148 int c
[3]; /* { dg-message "declared here" } */
149 int d
[4]; /* { dg-message "declared here" } */
155 case 0: p
= &a
[0]; break;
156 case 1: p
= &b
[1]; break;
157 case 2: p
= &c
[2]; break;
158 case 3: p
= &d
[3]; break;
163 return p
; /* { dg-warning "function may return address of local" } */
167 return_2_globals_3_locals (int i
)
169 int a
[1]; /* { dg-message "declared here" } */
170 int b
[2]; /* { dg-message "declared here" } */
171 int c
[3]; /* { dg-message "declared here" } */
185 return p
; /* { dg-warning "function may return address of local" } */
189 return_3_globals_2_locals (int i
)
191 int a
[1]; /* { dg-message "declared here" } */
192 int b
[2]; /* { dg-message "declared here" } */
206 return p
; /* { dg-warning "function may return address of local" } */
210 return_4_globals_1_local (int i
)
212 int a
[1]; /* { dg-message "declared here" } */
226 return p
; /* { dg-warning "function may return address of local" } */
230 return_all_globals (int i
)
246 return_2_alloca_local_cstoff (int n
, int i
)
248 int *a
= __builtin_alloca (n
); /* { dg-message "declared here" } */
249 int *b
= __builtin_alloca (n
); /* { dg-message "declared here" } */
250 int *p
= i
< 0 ? a
: b
;
255 return p
; /* { dg-warning "function returns address of local" } */
259 return_alloca_local_cstoff (int n
, int i
)
261 int *a
= __builtin_alloca (n
); /* { dg-message "declared here" } */
262 int b
[2]; /* { dg-message "declared here" } */
271 return p
; /* { dg-warning "function returns address of local" } */
275 return_local_alloca_cstoff (int n
, int i
)
277 int a
[2]; /* { dg-message "declared here" } */
278 int *b
= __builtin_alloca (n
); /* { dg-message "declared here" } */
286 return p
; /* { dg-warning "function returns address of local" } */
290 return_2_locals_cstoff (int i
)
292 int a
[1]; /* { dg-message "declared here" } */
293 int b
[2]; /* { dg-message "declared here" } */
302 return p
; /* { dg-warning "function returns address of local" } */
306 return_2_globals_3_locals_cstoff (int i
)
308 int a
[1]; /* { dg-message "declared here" } */
309 int b
[2]; /* { dg-message "declared here" } */
310 int c
[3]; /* { dg-message "declared here" } */
325 return p
; /* { dg-warning "function may return address of local" } */
329 return_3_globals_alloca_local_varoff (int n
, int i
, int j
)
331 int *a
= __builtin_alloca (n
); /* { dg-message "declared here" } */
332 int b
[2]; /* { dg-message "declared here" } */
347 return p
; /* { dg-warning "function may return address of local" } */
351 return_3_globals_2_locals_varoff (int i
, int j
)
353 int a
[1]; /* { dg-message "declared here" } */
354 int b
[2]; /* { dg-message "declared here" } */
369 return p
; /* { dg-warning "function may return address of local" } */