* g++.dg/pph/c1attr-warn-unused-result.cc: New.
[official-gcc.git] / gcc / testsuite / g++.dg / pph / c1attr-warn-unused-result.h
blobbfa2903bf68a9f2e17eb7f72b9ac863fc96af033
1 #ifndef __PPH_GUARD_H
2 #define __PPH_GUARD_H
3 /* { dg-options "-w" } */
5 #define WUR __attribute__((warn_unused_result))
6 #define WURAI __attribute__((warn_unused_result, always_inline)) inline
7 typedef WUR int (*fnt) (void);
9 typedef struct { long i; } A;
10 typedef struct { long i; long j; } B;
11 typedef struct { char big[1024]; fnt fn; } C;
13 WUR int check1 (void);
14 WUR void check2 (void);
15 int foo WUR;
16 int bar (void);
17 extern WURAI int check3 (void) { return bar (); }
18 WUR A check4 (void);
19 WUR B check5 (void);
20 WUR C check6 (void);
21 A bar7 (void);
22 B bar8 (void);
23 C bar9 (void);
24 extern WURAI A check7 (void) { return bar7 (); }
25 extern WURAI B check8 (void) { return bar8 (); }
26 extern WURAI C check9 (void) { return bar9 (); }
27 /* This is useful for checking whether return value of statement
28 expressions (returning int in this case) is used. */
29 extern WURAI int check_int_result (int res) { return res; }
30 #define GU(v) ({ int e = 0; (v) = bar (); if ((v) < 23) e = 14; e; })
31 fnt fnptr;
32 WUR int check10 (void);
33 int baz (void);
34 extern WURAI int check11 (void) { return baz (); }
35 int k;
37 void
38 test (void)
40 int i = 0, j;
41 const fnt pcheck1 = check1;
42 const fnt pcheck3 = check3;
43 A a;
44 B b;
45 C c;
46 if (check1 ())
47 return;
48 i += check1 ();
49 i += ({ check1 (); });
50 check1 ();
51 (void) check1 ();
52 check1 (), bar ();
53 check2 ();
54 (void) check2 ();
55 check2 (), bar ();
56 if (check3 ())
57 return;
58 i += check3 ();
59 i += ({ check3 (); });
60 check3 ();
61 (void) check3 ();
62 check3 (), bar ();
63 a = check4 ();
64 if (a.i)
65 return;
66 if (check4 ().i)
67 return;
68 if (({ check4 (); }).i)
69 return;
70 check4 ();
71 (void) check4 ();
72 check4 (), bar ();
73 b = check5 ();
74 if (b.i + b.j)
75 return;
76 if (check5 ().j)
77 return;
78 if (({ check5 (); }).j)
79 return;
80 check5 ();
81 (void) check5 ();
82 check5 (), bar ();
83 c = check6 ();
84 if (c.big[12] + c.big[29])
85 return;
86 if (check6 ().big[27])
87 return;
88 if (({ check6 (); }).big[0])
89 return;
90 check6 ();
91 (void) check6 ();
92 check6 (), bar ();
93 a = check7 ();
94 if (a.i)
95 return;
96 if (check7 ().i)
97 return;
98 if (({ check7 (); }).i)
99 return;
100 check7 ();
101 (void) check7 ();
102 check7 (), bar ();
103 b = check8 ();
104 if (b.i + b.j)
105 return;
106 if (check8 ().j)
107 return;
108 if (({ check8 (); }).j)
109 return;
110 check8 ();
111 (void) check8 ();
112 check8 (), bar ();
113 c = check9 ();
114 if (c.big[12] + c.big[29])
115 return;
116 if (check9 ().big[27])
117 return;
118 if (({ check9 (); }).big[0])
119 return;
120 check9 ();
121 (void) check9 ();
122 check9 (), bar ();
123 if (check_int_result (GU (j)))
124 return;
125 i += check_int_result (GU (j));
126 i += ({ check_int_result (GU (j)); });
127 check_int_result (GU (j));
128 (void) check_int_result (GU (j));
129 check_int_result (GU (j)), bar ();
130 if (fnptr ())
131 return;
132 i += fnptr ();
133 i += ({ fnptr (); });
134 fnptr ();
135 (void) fnptr ();
136 fnptr (), bar ();
137 fnptr = check1;
138 if (fnptr ())
139 return;
140 i += fnptr ();
141 i += ({ fnptr (); });
142 fnptr ();
143 (void) fnptr ();
144 fnptr (), bar ();
145 fnptr = check3;
146 if (fnptr ())
147 return;
148 i += fnptr ();
149 i += ({ fnptr (); });
150 fnptr ();
151 (void) fnptr ();
152 fnptr (), bar ();
153 if (bar9 ().fn ())
154 return;
155 i += bar9 ().fn ();
156 i += ({ bar9 ().fn (); });
157 bar9 ().fn ();
158 (void) bar9 ().fn ();
159 bar9 ().fn (), bar ();
160 if ((k ? check1 : check10) ())
161 return;
162 i += (k ? check1 : check10) ();
163 i += ({ (k ? check1 : check10) (); });
164 (k ? check1 : check10) ();
165 (void) (k ? check1 : check10) ();
166 (k ? check1 : check10) (), bar ();
167 if ((k ? check3 : check11) ())
168 return;
169 i += (k ? check3 : check11) ();
170 i += ({ (k ? check3 : check11) (); });
171 (k ? check3 : check11) ();
172 (void) (k ? check3 : check11) ();
173 (k ? check3 : check11) (), bar ();
174 if (pcheck1 ())
175 return;
176 i += pcheck1 ();
177 i += ({ pcheck1 (); });
178 pcheck1 ();
179 (void) pcheck1 ();
180 pcheck1 (), bar ();
181 if (pcheck3 ())
182 return;
183 i += pcheck3 ();
184 i += ({ pcheck3 (); });
185 pcheck3 ();
186 (void) pcheck3 ();
187 pcheck3 (), bar ();
189 #endif