]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/uninit-42.c
Warn for reads from write-only arguments [PR101734].
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / uninit-42.c
1 /* PR middle-end/101734 - missing warning reading from a write-only object
2 Verify that reading objects pointed to by arguments
3 declared with attribute access none or write-only is diagnosed by
4 -Wmaybe-uninitialized.
5 { dg-do compile }
6 { dg-options "-Wall" } */
7
8 #define A(mode, ...) __attribute__ ((access (mode, __VA_ARGS__)))
9
10 void sink (void *, ...);
11
12
13 A (write_only, 1, 2)
14 int nowarn_wo_assign_r0 (int *p, int n)
15 {
16 *p = n;
17 return *p;
18 }
19
20 A (write_only, 1, 2)
21 int nowarn_wo_sink_r0 (int *p, int n)
22 {
23 sink (p, p + 1, p + n);
24 return *p;
25 }
26
27 A (write_only, 1, 2)
28 int warn_wo_r0 (int *p, int n)
29 {
30 return *p; // { dg-warning "'\\*p' may be used uninitialized \\\[-Wmaybe-uninitialized" }
31 }
32
33
34 A (write_only, 1, 2)
35 int nowarn_wo_w1_r1 (int *p, int n)
36 {
37 p[1] = n;
38 return p[1];
39 }
40
41 A (write_only, 1, 2)
42 int warn_wo_r1 (int *p, int n)
43 {
44 return p[1]; // { dg-warning "'p\\\[1]' may be used uninitialized" }
45 }
46
47
48 A (write_only, 1, 2)
49 int nowarn_wo_rwi_rj (int *p, int n, int i, int j)
50 {
51 p[i] = n;
52 return p[j];
53 }
54
55 A (write_only, 1, 2)
56 int warn_wo_ri (int *p, int n, int i)
57 {
58 return p[i]; // { dg-warning " may be used uninitialized" }
59 }
60
61
62
63 A (none, 1, 2)
64 int* nowarn_none_sink_return (int *p, int n)
65 {
66 sink (p, p + 1, p + n);
67 return p;
68 }
69
70 A (none, 1, 2)
71 int warn_none_r0 (int *p, int n)
72 {
73 (void)&n;
74 return *p; // { dg-warning "'\\*p' may be used uninitialized" }
75 }
76
77 A (none, 1, 2)
78 int warn_none_r1 (int *p, int n)
79 {
80 return p[1]; // { dg-warning "'p\\\[1]' may be used uninitialized" }
81 }
82
83 A (write_only, 1, 2)
84 int warn_none_ri (int *p, int n, int i)
85 {
86 return p[i]; // { dg-warning " may be used uninitialized" }
87 }