]> andersk Git - splint.git/blame_incremental - src/Headers/llerror.h
Fixed all /*@i...@*/ tags (except 1).
[splint.git] / src / Headers / llerror.h
... / ...
CommitLineData
1/*
2** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003.
3** See ../LICENSE for license information.
4**
5*/
6
7# ifndef LLERROR_H
8# define LLERROR_H
9
10extern bool /*@alt void@*/ check (bool p_x);
11# define check(p_x) doCheck (p_x, cstring_fromChars (#p_x), cstring_makeLiteralTemp (__FILE__), __LINE__)
12
13extern bool doCheck (bool p_x, cstring p_pred, cstring p_file, int p_line);
14
15extern /*@noreturnwhenfalse@*/ void llassert (/*@sef@*/ bool p_test);
16/*@-macroredef@*/
17# define llassert(tst) \
18 do { if (!(tst)) { \
19 if (context_getFlag (FLG_TRYTORECOVER)) checkParseError (); \
20 lldiagmsg (message ("%s:%d: at source point", \
21 cstring_makeLiteralTemp (__FILE__), __LINE__)); \
22 llbuglit ("llassert failed: " #tst); \
23 }} while (FALSE)
24/*@=macroredef@*/
25
26extern /*@noreturnwhenfalse@*/ void llassertretnull (/*@sef@*/ bool p_test);
27# define llassertretnull(tst) \
28 do { if (!(tst)) { \
29 if (context_getFlag (FLG_TRYTORECOVER)) checkParseError (); \
30 lldiagmsg (message ("%s:%d: at source point", \
31 cstring_makeLiteralTemp (__FILE__), __LINE__)); \
32 llbuglit ("llassert failed: " #tst); \
33 }} while (FALSE)
34
35typedef void *tx_voidptr;
36
37extern /*@noreturnwhenfalse@*/ void
38llassertretval (/*@sef@*/ bool p_test, /*@sef@*/ /*@null@*/ tx_voidptr /*@alt anytype@*/ p_val);
39# define llassertretval(tst,val) \
40 do { if (!(tst)) { \
41 if (context_getFlag (FLG_TRYTORECOVER)) checkParseError (); \
42 lldiagmsg (message ("%s:%d: at source point", \
43 cstring_makeLiteralTemp (__FILE__), __LINE__)); \
44 llbuglit ("llassert failed: " #tst); \
45 /*@-type@*/ return (val); /*@=type@*/ \
46 }} while (FALSE)
47
48/*
49** Use this for assertions in error-generation code (that
50** might lead to infinite loops of failed assertions if
51** the normal error generation routines are used).
52*/
53
54extern /*@noreturnwhenfalse@*/ void llassertprotect (/*@sef@*/ bool p_test);
55# define llassertprotect(tst) \
56 do { if (!(tst)) { \
57 fprintf (stderr, "%s:%d: at source point: ", __FILE__, __LINE__); \
58 fprintf (stderr, "protected fatal llassert failed: " #tst "\n"); \
59 llexit (EXIT_FAILURE); \
60 }} while (FALSE)
61
62extern /*@noreturnwhenfalse@*/ void llassertfatal (/*@sef@*/ bool p_test);
63# define llassertfatal(tst) \
64 do { if (!(tst)) \
65 llfatalbug (message("%s:%d: fatal llassert failed: " #tst, \
66 cstring_makeLiteralTemp (__FILE__), __LINE__)); \
67 } while (FALSE)
68
69/*
70** llassertprint and llassertprintret are in splintMacros.nf
71*/
72
73extern void llmsg (/*@only@*/ cstring p_s) /*@modifies g_warningstream@*/ ;
74
75extern void lldiagmsg (/*@only@*/ cstring p_s) /*@modifies stderr@*/ ;
76extern void llmsgplain (/*@only@*/ cstring p_s) /*@modifies g_warningstream@*/ ;
77extern void llhint (/*@only@*/ cstring p_s)
78 /*@globals g_currentloc, g_warningstream;@*/
79 /*@modifies g_warningstream@*/ ;
80
81extern /*@private@*/ /*@noreturn@*/ void
82xllfatalbug (char *p_srcFile, int p_srcLine, /*@only@*/ cstring p_s)
83 /*@globals g_currentloc@*/
84 /*@modifies g_errorstream@*/ ;
85
86extern /*@noreturn@*/ void llfatalbug (/*@only@*/ cstring p_s)
87 /*@globals g_currentloc@*/
88 /*@modifies g_errorstream@*/ ;
89
90# define llfatalbug(p_s) \
91 xllfatalbug (__FILE__, __LINE__, p_s)
92
93extern /*@private@*/ bool xllgenerror (char *p_srcFile, int p_srcLine, flagcode p_o,
94 /*@only@*/ cstring p_s, fileloc p_fl)
95 /*@modifies g_warningstream@*/ ;
96
97extern bool llgenerror (flagcode p_o, /*@only@*/ cstring p_s, fileloc p_fl)
98 /*@modifies g_warningstream@*/ ;
99# define llgenerror(p_o, p_s, p_fl) \
100 xllgenerror (__FILE__, __LINE__, p_o, p_s, p_fl)
101
102extern /*@private@*/ bool
103 xllgenhinterror (char *p_srcFile, int p_srcLine,
104 flagcode p_o, /*@only@*/ cstring p_s, /*@only@*/ cstring p_hint,
105 fileloc p_fl)
106 /*@modifies g_warningstream@*/ ;
107
108extern bool llgenhinterror (flagcode p_o, /*@only@*/ cstring p_s, /*@only@*/ cstring p_hint,
109 fileloc p_fl) /*@modifies g_warningstream@*/ ;
110
111# define llgenhinterror(p_o, p_s, p_hint, p_fl) \
112 xllgenhinterror (__FILE__, __LINE__, p_o, p_s, p_hint, p_fl)
113
114
115extern void llerror (flagcode p_o, /*@only@*/ cstring p_s)
116 /*@globals g_warningstream, g_currentloc@*/
117 /*@modifies g_warningstream@*/ ;
118# define llerror(p_o, p_s) \
119 ((void) llgenerror (p_o, p_s, g_currentloc))
120
121extern void llgenmsg (/*@only@*/ cstring p_s, fileloc p_fl)
122 /*@modifies g_warningstream@*/ ;
123
124extern /*@noreturn@*/ /*@private@*/
125void xllfatalerror (char *p_srcFile, int p_srcLine, /*@only@*/ cstring p_s)
126 /*@modifies g_errorstream@*/ ;
127
128extern /*@noreturn@*/ void llfatalerror (/*@only@*/ cstring p_s)
129 /*@modifies g_errorstream@*/ ;
130# define llfatalerror(p_s) xllfatalerror (__FILE__, __LINE__, p_s)
131
132extern /*@noreturn@*/ /*@private@*/ void
133xllfatalerrorLoc (char *p_srcFile, int p_srcLine, /*@only@*/ cstring p_s)
134 /*@globals g_currentloc@*/
135 /*@modifies g_errorstream@*/ ;
136
137extern /*@noreturn@*/ void llfatalerrorLoc (/*@only@*/ cstring p_s)
138 /*@globals g_currentloc@*/
139 /*@modifies g_errorstream@*/ ;
140# define llfatalerrorLoc(p_s) xllfatalerrorLoc (__FILE__, __LINE__, p_s)
141
142extern /*@private@*/ void
143 xllparseerror (char *p_srcFile, int p_srcLine, /*@only@*/ cstring p_s)
144 /*@globals g_currentloc@*/
145 /*@modifies g_warningstream@*/ ;
146
147extern void llparseerror (/*@only@*/ cstring p_s)
148 /*@globals g_currentloc@*/
149 /*@modifies g_warningstream@*/ ;
150
151# define llparseerror(p_s) xllparseerror (__FILE__, __LINE__, p_s)
152
153extern /*@noreturn@*/ void lclplainfatalerror (/*@only@*/ cstring p_msg) /*@modifies g_warningstream@*/ ;
154extern /*@noreturn@*/ void lclfatalbug (/*@temp@*/ char *p_msg) /*@modifies g_warningstream@*/ ;
155extern int lclNumberErrors (void) /*@*/ ;
156extern bool lclHadNewError (void) /*@modifies internalState@*/ ;
157extern /*@noreturn@*/ void lclfatalerror (ltoken p_t, /*@only@*/ cstring p_msg);
158
159extern void xlclerror (char *p_srcFile, int p_srcLine, ltoken p_t, /*@only@*/ cstring p_msg) ;
160
161extern void lclerror (ltoken p_t, /*@only@*/ cstring p_msg);
162# define lclerror(p_t,p_msg) \
163 xlclerror (__FILE__, __LINE__, p_t, p_msg)
164
165extern void lclbug (/*@only@*/ cstring p_s);
166extern void lclplainerror (/*@only@*/ cstring p_msg);
167extern bool lclHadError (void);
168extern void lclRedeclarationError (ltoken p_id);
169
170extern void llerror_flagWarning (/*@only@*/ cstring p_s) /*@modifies g_warningstream@*/ ;
171
172extern /*@noreturn@*/ void llbugaux (cstring p_file, int p_line, /*@only@*/ cstring p_s)
173 /*@globals g_warningstream, g_currentloc@*/
174 /*@modifies *g_warningstream@*/ ;
175
176extern /*@noreturn@*/ void llbug (/*@only@*/ cstring p_s)
177 /*@globals g_warningstream, g_currentloc@*/
178 /*@modifies *g_warningstream@*/ ;
179
180 /* doesn't really exit, but don't mind errors if it doesn't */
181# define llbug(s) llbugaux (cstring_makeLiteralTemp (__FILE__), __LINE__, s)
182
183extern void llquietbugaux (/*@only@*/ cstring p_s, cstring, int) /*@modifies *g_warningstream@*/ ;
184extern void llquietbug (/*@only@*/ cstring) /*@modifies *g_warningstream@*/ ;
185# define llquietbug(s) llquietbugaux (s, cstring_makeLiteralTemp (__FILE__), __LINE__)
186
187extern void llcontbug (/*@only@*/ cstring p_s) /*@modifies *g_warningstream@*/ ;
188 /* doesn't really exit, but don't mind errors if it doesn't */
189# define llcontbug(s) (llbug (s))
190
191extern void cleanupMessages (void)
192 /*@globals g_warningstream, g_currentloc;@*/
193 /*@modifies g_warningstream, internalState@*/ ;
194
195extern void displayScan (/*@only@*/ cstring p_msg)
196 /*@modifies g_messagestream@*/ ;
197
198extern void displayScanOpen (/*@only@*/ cstring p_msg)
199 /*@modifies g_messagestream@*/ ;
200
201extern void displayScanContinue (/*@temp@*/ cstring p_msg)
202 /*@modifies g_messagestream@*/ ;
203
204extern void displayScanClose (void)
205 /*@modifies g_messagestream@*/ ;
206
207/*
208** Report error iff f1 and f2 are set.
209*/
210
211extern bool
212xoptgenerror2 (char *p_srcFile, int p_srcLine,
213 flagcode p_f1, flagcode p_f2, /*@only@*/ cstring p_s, fileloc p_loc)
214 /*@modifies *g_warningstream, internalState@*/ ;
215
216extern bool
217optgenerror2 (flagcode p_f1, flagcode p_f2, /*@only@*/ cstring p_s, fileloc p_loc)
218 /*@modifies *g_warningstream, internalState@*/ ;
219# define optgenerror2(p_f1, p_f2, p_s, p_loc) \
220 (xoptgenerror2 (__FILE__, __LINE__, p_f1, p_f2, p_s, p_loc))
221
222/*
223** Report error if f1 is set and f2 is not set.
224*/
225
226extern bool
227xoptgenerror2n (char *p_srcFile, int p_srcLine,
228 flagcode p_f1, flagcode p_f2, /*@only@*/ cstring p_s, fileloc p_loc)
229 /*@modifies *g_warningstream, internalState@*/ ;
230
231extern bool
232optgenerror2n (flagcode p_f1, flagcode p_f2, /*@only@*/ cstring p_s, fileloc p_loc)
233 /*@modifies *g_warningstream, internalState@*/ ;
234# define optgenerror2n(p_f1, p_f2, p_s, p_loc) \
235 (xoptgenerror2n (__FILE__, __LINE__, p_f1, p_f2, p_s, p_loc))
236
237extern /*@private@*/ bool xlloptgenerror (char *p_srcFile, int p_srcLine, flagcode p_o, /*@only@*/ cstring p_s, fileloc p_loc)
238 /*@modifies *g_warningstream, internalState@*/ ;
239
240extern bool lloptgenerror (flagcode p_o, /*@only@*/ cstring p_s, fileloc p_loc)
241 /*@modifies *g_warningstream, internalState@*/ ;
242# define lloptgenerror(p_o, p_s, p_loc) \
243 (xlloptgenerror (__FILE__, __LINE__, p_o, p_s, p_loc))
244
245extern bool xllnoptgenerror (char *p_srcFile, int p_srcLine,
246 flagcode p_o, /*@only@*/ cstring p_s, fileloc p_loc)
247 /*@modifies *g_warningstream, internalState@*/ ;
248
249extern bool llnoptgenerror (flagcode p_o, /*@only@*/ cstring p_s, fileloc p_loc)
250 /*@modifies *g_warningstream, internalState@*/ ;
251# define llnoptgenerror(p_o, p_s, p_loc) \
252 (xllnoptgenerror (__FILE__, __LINE__, p_o, p_s, p_loc))
253
254extern /*@private@*/ bool
255 xllgenformattypeerror (char *p_srcFile, int p_srcLine,
256 ctype p_t1, exprNode p_e1,
257 ctype p_t2, exprNode p_e2,
258 /*@only@*/ cstring p_s, fileloc p_fl)
259 /*@modifies *g_warningstream, internalState@*/ ;
260
261extern bool llgenformattypeerror (ctype p_t1, exprNode p_e1,
262 ctype p_t2, exprNode p_e2,
263 /*@only@*/ cstring p_s, fileloc p_fl)
264 /*@modifies *g_warningstream, internalState@*/ ;
265# define llgenformattypeerror(p_t1, p_e1, p_t2, p_e2, p_s, p_fl) \
266 xllgenformattypeerror (__FILE__, __LINE__, p_t1, p_e1, p_t2, p_e2, p_s, p_fl)
267
268extern bool xllgentypeerror (char *p_srcFile, int p_srcLine,
269 ctype p_t1, exprNode p_e1,
270 ctype p_t2, exprNode p_e2,
271 /*@only@*/ cstring p_s,
272 fileloc p_fl)
273 /*@modifies *g_warningstream, internalState@*/ ;
274
275extern bool llgentypeerror (ctype p_t1, exprNode p_e1,
276 ctype p_t2, exprNode p_e2,
277 /*@only@*/ cstring p_s,
278 fileloc p_fl)
279 /*@modifies *g_warningstream, internalState@*/ ;
280# define llgentypeerror(p_t1, p_e1, p_t2, p_e2, p_s, p_fl) \
281 xllgentypeerror (__FILE__, __LINE__, p_t1, p_e1, p_t2, p_e2, p_s, p_fl)
282
283extern bool gentypeerror (/*@sef@*/ ctype p_t1,
284 /*@sef@*/ exprNode p_e1,
285 /*@sef@*/ ctype p_t2,
286 /*@sef@*/ exprNode p_e2,
287 /*@sef@*/ /*@only@*/ cstring p_s,
288 /*@sef@*/ fileloc p_loc)
289 /*@modifies *g_warningstream, internalState@*/ ;
290
291/*@-branchstate@*/ /* sef only s is freed on one branch */
292#define gentypeerror(t1, e1, t2, e2, s, loc) \
293 (context_suppressFlagMsg (FLG_TYPE,loc) \
294 ? (flagcode_recordSuppressed (FLG_TYPE), FALSE) \
295 : llgentypeerror (t1, e1, t2, e2, s, loc))
296/*@=branchstate@*/
297
298/*
299** These are macros to save evaluating s (which may be some expensive
300** message generation function).
301*/
302
303extern bool
304 optgenerror (/*@sef@*/ flagcode p_o, /*@sef@*/ /*@only@*/ cstring p_s,
305 /*@sef@*/ fileloc p_loc)
306 /*@modifies *g_warningstream, internalState@*/ ;
307
308/*@-branchstate@*/ /* sef only s is freed on one branch */
309#define optgenerror(o,s,loc) \
310 (context_suppressFlagMsg(o,loc) ? (flagcode_recordSuppressed(o), FALSE) \
311 : lloptgenerror (o, s, loc))
312/*@=branchstate@*/
313
314extern void
315 voptgenerror (/*@sef@*/ flagcode p_o, /*@sef@*/ /*@only@*/ cstring p_s,
316 /*@sef@*/ fileloc p_loc)
317 /*@modifies *g_warningstream, internalState@*/ ;
318#define voptgenerror(o, s, loc) ((void) optgenerror(o,s,loc))
319
320extern /*@private@*/ bool
321 xfsgenerror (char *p_srcFile, int p_srcLine,
322 flagSpec p_fs, /*@only@*/ cstring p_s, fileloc p_fl)
323 /*@modifies g_warningstream, internalState@*/ ;
324
325extern bool fsgenerror (flagSpec p_fs, /*@only@*/ cstring p_s, fileloc p_fl)
326 /*@modifies g_warningstream, internalState@*/ ;
327# define fsgenerror(p_fs, p_s, p_fl) \
328 xfsgenerror (__FILE__, __LINE__, p_fs, p_s, p_fl)
329
330extern void
331vfsgenerror (/*@sef@*/ flagSpec p_fs, /*@sef@*/ /*@only@*/ cstring p_s,
332 /*@sef@*/ fileloc p_loc)
333 /*@modifies *g_warningstream, internalState@*/ ;
334#define vfsgenerror(fs, s, loc) ((void) fsgenerror(fs,s,loc))
335
336/*
337** Reports a warning when f1 is ON and f2 is ON
338*/
339
340extern void
341 voptgenerror2 (/*@sef@*/ flagcode p_f1, /*@sef@*/ flagcode p_f2,
342 /*@sef@*/ /*@only@*/ cstring p_s, /*@sef@*/ fileloc p_loc);
343#define voptgenerror2(f1, f2, s, loc) ((void) optgenerror2 (f1, f2, s, loc))
344
345/*
346** Reports a warning when f1 is ON and f2 is OFF
347*/
348
349extern void
350 voptgenerror2n (/*@sef@*/ flagcode p_f1, /*@sef@*/ flagcode p_f2,
351 /*@sef@*/ /*@only@*/ cstring p_s, /*@sef@*/ fileloc p_loc);
352#define voptgenerror2n(f1, f2, s, loc) ((void) optgenerror2n (f1, f2, s, loc))
353
354extern void noptgenerror (/*@sef@*/ flagcode p_code,
355 /*@sef@*/ /*@only@*/ cstring p_s,
356 /*@sef@*/ fileloc p_loc);
357/*@-branchstate@*/ /* sef only s is freed on one branch */
358#define noptgenerror(o,s,loc) \
359 (context_suppressNotFlagMsg (o, loc) \
360 ? (flagcode_recordSuppressed(o), FALSE) \
361 : llnoptgenerror (o, s, loc))
362/*@=branchstate@*/
363
364extern void
365 vnoptgenerror (/*@sef@*/ flagcode p_code, /*@sef@*/ /*@only@*/ cstring p_msg,
366 /*@sef@*/ fileloc p_loc);
367# define vnoptgenerror(o, s, loc) ((void) noptgenerror(o, s, loc))
368
369extern void
370 vgenhinterror (flagcode p_code, /*@only@*/ cstring p_mst,
371 /*@only@*/ cstring p_hint, /*@sef@*/ fileloc p_loc);
372# define vgenhinterror(o, s, h, loc) \
373 ((void) llgenhinterror(o, s, h, loc))
374
375
376extern /*@private@*/ bool /*@alt void@*/ xllforceerror (char *p_srcFile, int p_srcLine, flagcode p_code, /*@only@*/ cstring p_s, fileloc p_fl)
377 /*@modifies g_warningstream@*/ ;
378
379extern bool /*@alt void@*/ llforceerror (flagcode p_code, /*@only@*/ cstring p_s, fileloc p_fl)
380 /*@modifies g_warningstream@*/ ;
381# define llforceerror(p_code, p_s, p_fl) \
382 (xllforceerror (__FILE__, __LINE__, p_code, p_s, p_fl))
383
384extern /*@private@*/ bool xcppoptgenerror (char *p_srcFile, int p_srcLine, flagcode p_o,
385 /*@only@*/ cstring p_s, cppReader *p_pfile)
386 /*@modifies g_warningstream, p_pfile@*/ ;
387
388extern bool /*@alt void@*/
389cppoptgenerror (flagcode p_code, /*@only@*/ cstring p_s, cppReader *p_pfile)
390 /*@modifies g_warningstream, p_pfile@*/ ;
391# define cppoptgenerror(p_code, p_s, p_pfile) \
392 (xcppoptgenerror (__FILE__, __LINE__, p_code, p_s, p_pfile))
393
394extern void llerrorlit (flagcode p_o, char *p_s);
395# define llerrorlit(o, s) ((void) llerror (o, cstring_makeLiteral (s)))
396
397extern void llgenindentmsg (/*@only@*/ cstring p_s, fileloc p_fl) /*@modifies g_warningstream@*/ ;
398
399extern /*@noreturn@*/ void llbugexitlit (char *p_s);
400# define llbugexitlit(s) (llbug (cstring_makeLiteral (s)))
401
402extern void llbuglit (char *p_s);
403# define llbuglit(s) (llbug (cstring_makeLiteral (s)))
404
405extern void llcontbuglit (char *p_s);
406# define llcontbuglit(s) (llbug (cstring_makeLiteral (s)))
407
408extern void checkParseError (void);
409
410extern void llmsglit (char *p_s);
411# define llmsglit(s) (llmsg (cstring_makeLiteral (s)))
412
413extern void ppllerror (/*@only@*/ cstring p_s);
414
415extern void genppllerrorhint (flagcode p_code, /*@only@*/ cstring p_s,
416 /*@only@*/ cstring p_hint);
417extern void genppllerror (flagcode p_code, /*@only@*/ cstring p_s);
418extern /*@unused@*/ void pplldiagmsg (/*@only@*/ cstring p_s);
419extern void loadllmsg (/*@only@*/ cstring p_s);
420
421extern void llgenindentmsgnoloc (/*@only@*/ cstring p_s);
422
423extern /*@observer@*/ cstring lldecodeerror (int) /*@*/ ;
424
425/*
426** should be static, but used in cpperror (which shouldn't exist)
427*/
428
429extern void prepareMessage (void)
430 /*@modifies internalState, g_messagestream@*/ ;
431
432extern void closeMessage (void)
433 /*@modifies internalState, g_messagestream@*/ ;
434
435extern void llflush (void) /*@modifies systemState@*/ ;
436
437# else
438# error "Multiple include"
439# endif
440
This page took 0.043824 seconds and 5 git commands to generate.