1 /* Exercise conditional C-only uses of dangling pointers with optimization.
3 { dg-options "-O2 -Wall" } */
5 typedef __SIZE_TYPE__
size_t;
7 extern void* memchr (const void*, int, size_t);
8 extern char* strchr (const char*, int);
10 void sink (void*, ...);
13 void nowarn_compound_literal (int i
, int j
)
16 int *p
= i
? (int[]){ 1, 2, 3 } : (int[]){ 4, 5, 6 };
20 int a
[] = { 1, 2, 3 };
21 int *q
= i
? (int[]){ 4, 5, 6 } : a
;
26 int *p
= i
? (int[]){ 1, 2, 3 } : (int[]){ 4, 5, 6 };
27 int *q
= __builtin_memchr (p
, 2, 3 * sizeof *p
);
31 int a
[] = { i
, i
+ 1, i
+ 2, 3 };
32 int *p
= i
? (int[]){ j
, j
+ 1, j
+ 2, 3 } : a
;
33 int *q
= __builtin_memchr (p
, 3, 4 * sizeof *p
);
39 void warn_maybe_compound_literal (int i
, int j
)
41 int a
[] = { 1, 2, 3 }, *p
;
43 p
= i
? (int[]){ 4, 5, 6 } : a
;
45 // When the 'p' is optimized away it's not mentioned in the warning.
46 sink (p
); // { dg-warning "dangling pointer \('p' \)?to an unnamed temporary may be used" }
50 void warn_maybe_compound_literal_memchr (int i
, int j
, int x
)
52 int a
[] = { 1, 2, 3 }, *p
;
54 int *q
= i
? (int[]){ 4, 5, 6 } : a
;
55 p
= memchr (q
, x
, 3 * sizeof *q
);
57 sink (p
); // { dg-warning "dangling pointer 'p' to an unnamed temporary may be used" }
61 void warn_maybe_array (int i
, int j
)
63 int a
[] = { 1, 2, 3 }, *p
;
65 int b
[] = { 4, 5, 6 };
68 // When the 'p' is optimized away it's not mentioned in the warning.
69 sink (p
); // { dg-warning "dangling pointer \('p' \)?to 'b' may be used" }
73 void warn_maybe_array_memchr (int i
, int j
, int x
)
75 int a
[] = { 1, 2, 3 }, *p
;
77 int b
[] = { 4, 5, 6 };
79 p
= memchr (q
, x
, 3 * sizeof *q
);
81 sink (p
); // { dg-warning "dangling pointer 'p' to 'b' may be used" }