]> andersk Git - splint.git/blame - src/Headers/qual.h
Added the code for setBufferSize and setStringLegnth annotations.
[splint.git] / src / Headers / qual.h
CommitLineData
885824d3 1/*
2** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2000.
3** See ../LICENSE for license information.
4**
5*/
6/*
7** qual.h
8**
9** representation of type qualifiers
10*/
11
12# ifndef QUALH
13# define QUALH
14
15/*
16** just use tokens to represent type qualifiers
17** (tokens are defined in cgrammar.y)
18*/
19
20typedef enum _quals {
21 QU_UNKNOWN,
22 QU_CONST, QU_VOLATILE, QU_INLINE,
23 QU_EXTERN, QU_STATIC, QU_AUTO, QU_REGISTER,
24 QU_SHORT, QU_LONG, QU_SIGNED, QU_UNSIGNED,
25 QU_OUT, QU_IN,
26 QU_ONLY, QU_IMPONLY,
27 QU_TEMP, QU_SHARED, QU_KEEP, QU_KEPT, QU_PARTIAL, QU_SPECIAL,
1ac6313d 28 QU_NULL, QU_RELNULL, QU_NULLTERMINATED,
11ed4f45 29 QU_SETBUFFERSIZE,
885824d3 30 QU_EXPOSED, QU_RETURNED, QU_OBSERVER, QU_UNIQUE,
31 QU_OWNED, QU_DEPENDENT, QU_RELDEF,
32 QU_YIELD,
33 QU_NEVEREXIT, QU_EXITS, QU_MAYEXIT, QU_TRUEEXIT, QU_FALSEEXIT,
34 QU_UNUSED, QU_EXTERNAL, QU_SEF,
35 QU_NOTNULL,
36 QU_ABSTRACT, QU_CONCRETE,
37 QU_MUTABLE, QU_IMMUTABLE,
38 QU_REFCOUNTED, QU_REFS, QU_NEWREF, QU_KILLREF, QU_TEMPREF,
39 QU_TRUENULL, QU_FALSENULL,
40 QU_CHECKED, QU_UNCHECKED, QU_CHECKEDSTRICT, QU_CHECKMOD,
41 QU_UNDEF, QU_KILLED,
42 QU_PRINTFLIKE, QU_SCANFLIKE, QU_MESSAGELIKE,
43 QU_LAST
44} qual ;
45
46/*
47** qualifiers correspond to tokens in the grammar:
48**
49** standard C qualifiers:
50** QCONST QVOLATILE QINLINE QEXTERN QSTATIC QAUTO QREGISTER
51** QSHORT QLONG QSIGNED QUNSIGNED
52** augmented LCL qualifiers:
53** QOUT QONLY QTEMP QSHARED QUNIQUE QYIELD
1ac6313d 54** QEXITS QMAYEXIT QNULLTERMINATED
885824d3 55*/
56
57extern qual qual_fromInt (int p_q) /*@*/ ;
58extern /*@observer@*/ cstring qual_unparse (qual p_q) /*@*/ ;
59
60extern bool qual_equal (qual p_q1, qual p_q2) /*@*/ ;
61# define qual_equal(q1,q2) ((q1) == (q2))
62
63extern bool qual_isUnknown (qual) /*@*/ ;
64extern bool qual_isTrueNull (qual) /*@*/ ;
65extern bool qual_isFalseNull (qual) /*@*/ ;
66extern bool qual_isOwned (qual) /*@*/ ;
67extern bool qual_isDependent (qual) /*@*/ ;
68extern bool qual_isRefCounted (qual) /*@*/ ;
69extern bool qual_isRefs (qual) /*@*/ ;
70extern bool qual_isNewRef (qual) /*@*/ ;
71extern bool qual_isKillRef (qual) /*@*/ ;
72extern bool qual_isTempRef (qual) /*@*/ ;
73extern bool qual_isLong (qual) /*@*/ ;
74extern bool qual_isShort (qual) /*@*/ ;
75extern bool qual_isSigned (qual) /*@*/ ;
76extern bool qual_isUnsigned (qual) /*@*/ ;
77extern bool qual_isUnique (qual) /*@*/ ;
78extern bool qual_isExits (qual) /*@*/ ;
79extern bool qual_isMayExit (qual) /*@*/ ;
80extern bool qual_isNeverExit (qual) /*@*/ ;
81extern bool qual_isTrueExit (qual) /*@*/ ;
82extern bool qual_isFalseExit (qual) /*@*/ ;
83extern bool qual_isConst (qual) /*@*/ ;
84extern bool qual_isVolatile (qual) /*@*/ ;
85extern bool qual_isInline (qual) /*@*/ ;
86extern bool qual_isExtern (qual) /*@*/ ;
87extern bool qual_isStatic (qual) /*@*/ ;
88extern bool qual_isAuto (qual) /*@*/ ;
89extern bool qual_isRegister (qual) /*@*/ ;
90extern bool qual_isOut (qual) /*@*/ ;
91extern bool qual_isIn (qual) /*@*/ ;
92extern bool qual_isYield (qual) /*@*/ ;
93extern bool qual_isOnly (qual) /*@*/ ;
94extern bool qual_isImpOnly (qual) /*@*/ ;
95extern bool qual_isPartial (qual) /*@*/ ;
96extern bool qual_isSpecial (qual) /*@*/ ;
97extern bool qual_isKeep (qual) /*@*/ ;
98extern bool qual_isKept (qual) /*@*/ ;
99extern bool qual_isTemp (qual) /*@*/ ;
100extern bool qual_isShared (qual) /*@*/ ;
101extern bool qual_isRelDef (qual) /*@*/ ;
102extern bool qual_isChecked (qual) /*@*/ ;
103extern bool qual_isCheckMod (qual) /*@*/ ;
104extern bool qual_isCheckedStrict (qual) /*@*/ ;
105extern bool qual_isUnchecked (qual) /*@*/ ;
106extern bool qual_isNull (qual) /*@*/ ;
107extern bool qual_isRelNull (qual) /*@*/ ;
108extern bool qual_isNotNull (qual) /*@*/ ;
109extern bool qual_isReturned (qual) /*@*/ ;
110extern bool qual_isExposed (qual) /*@*/ ;
111extern bool qual_isObserver (qual) /*@*/ ;
112extern bool qual_isUnused (qual) /*@*/ ;
113extern bool qual_isExternal (qual) /*@*/ ;
114extern bool qual_isSef (qual) /*@*/ ;
115extern bool qual_isAbstract (qual) /*@*/ ;
116extern bool qual_isConcrete (qual) /*@*/ ;
117extern bool qual_isMutable (qual) /*@*/ ;
118extern bool qual_isImmutable (qual) /*@*/ ;
119extern bool qual_isNullPred (/*@sef@*/ qual) /*@*/ ;
120extern bool qual_isRefQual (/*@sef@*/ qual) /*@*/ ;
121extern bool qual_isUndef (/*@sef@*/ qual) /*@*/ ;
122extern bool qual_isKilled (/*@sef@*/ qual) /*@*/ ;
123extern /*@unused@*/ bool qual_isTypeQual (/*@sef@*/ qual) /*@*/ ;
124extern /*@unused@*/ bool qual_isControlQual (/*@sef@*/ qual) /*@*/ ;
125extern /*@unused@*/ bool qual_isStorageClass (/*@sef@*/ qual) /*@*/ ;
126extern bool qual_isCQual (/*@sef@*/ qual) /*@*/ ;
127extern bool qual_isAllocQual (/*@sef@*/ qual) /*@*/ ;
128extern bool qual_isGlobalQual (/*@sef@*/ qual) /*@*/ ;
129extern bool qual_isImplied (/*@sef@*/ qual) /*@*/ ;
130extern bool qual_isExQual (/*@sef@*/ qual) /*@*/ ;
131extern bool qual_isAliasQual (/*@sef@*/ qual) /*@*/ ;
1ac6313d 132/* start modifications */
133extern bool qual_isNullTerminated (qual) /*@*/ ;
134extern bool qual_isBufQualifier (qual) /*@*/ ;
135/* end modifications */
885824d3 136
137# define qual_isUnknown(q) ((q) == QU_UNKNOWN)
138# define qual_isTrueNull(q) ((q) == QU_TRUENULL)
139# define qual_isFalseNull(q) ((q) == QU_FALSENULL)
140# define qual_isOwned(q) ((q) == QU_OWNED)
141# define qual_isDependent(q) ((q) == QU_DEPENDENT)
142# define qual_isRefCounted(q) ((q) == QU_REFCOUNTED)
143# define qual_isRefs(q) ((q) == QU_REFS)
144# define qual_isNewRef(q) ((q) == QU_NEWREF)
145# define qual_isKillRef(q) ((q) == QU_KILLREF)
146# define qual_isTempRef(q) ((q) == QU_TEMPREF)
147# define qual_isLong(q) ((q) == QU_LONG)
148# define qual_isShort(q) ((q) == QU_SHORT)
149# define qual_isSigned(q) ((q) == QU_SIGNED)
150# define qual_isUnsigned(q) ((q) == QU_UNSIGNED)
151# define qual_isUnique(q) ((q) == QU_UNIQUE)
152# define qual_isExits(q) ((q) == QU_EXITS)
153# define qual_isMayExit(q) ((q) == QU_MAYEXIT)
154# define qual_isNeverExit(q) ((q) == QU_NEVEREXIT)
155# define qual_isTrueExit(q) ((q) == QU_TRUEEXIT)
156# define qual_isFalseExit(q) ((q) == QU_FALSEEXIT)
157# define qual_isConst(q) ((q) == QU_CONST)
158# define qual_isVolatile(q) ((q) == QU_VOLATILE)
159# define qual_isInline(q) ((q) == QU_INLINE)
160# define qual_isExtern(q) ((q) == QU_EXTERN)
161# define qual_isStatic(q) ((q) == QU_STATIC)
162# define qual_isAuto(q) ((q) == QU_AUTO)
163# define qual_isRegister(q) ((q) == QU_REGISTER)
164# define qual_isOut(q) ((q) == QU_OUT)
165# define qual_isIn(q) ((q) == QU_IN)
166# define qual_isYield(q) ((q) == QU_YIELD)
167# define qual_isOnly(q) ((q) == QU_ONLY)
168# define qual_isImpOnly(q) ((q) == QU_IMPONLY)
169# define qual_isPartial(q) ((q) == QU_PARTIAL)
170# define qual_isSpecial(q) ((q) == QU_SPECIAL)
171# define qual_isKeep(q) ((q) == QU_KEEP)
172# define qual_isKept(q) ((q) == QU_KEPT)
173# define qual_isTemp(q) ((q) == QU_TEMP)
174# define qual_isShared(q) ((q) == QU_SHARED)
175# define qual_isRelDef(q) ((q) == QU_RELDEF)
176# define qual_isNull(q) ((q) == QU_NULL)
177# define qual_isRelNull(q) ((q) == QU_RELNULL)
178# define qual_isNotNull(q) ((q) == QU_NOTNULL)
179# define qual_isReturned(q) ((q) == QU_RETURNED)
180# define qual_isExposed(q) ((q) == QU_EXPOSED)
181# define qual_isObserver(q) ((q) == QU_OBSERVER)
182# define qual_isUnused(q) ((q) == QU_UNUSED)
183# define qual_isExternal(q) ((q) == QU_EXTERNAL)
184# define qual_isSef(q) ((q) == QU_SEF)
185# define qual_isAbstract(q) ((q) == QU_ABSTRACT)
186# define qual_isConcrete(q) ((q) == QU_CONCRETE)
187# define qual_isMutable(q) ((q) == QU_MUTABLE)
188# define qual_isImmutable(q) ((q) == QU_IMMUTABLE)
189# define qual_isChecked(q) ((q) == QU_CHECKED)
190# define qual_isCheckMod(q) ((q) == QU_CHECKMOD)
191# define qual_isCheckedStrict(q) ((q) == QU_CHECKEDSTRICT)
192# define qual_isUnchecked(q) ((q) == QU_UNCHECKED)
193# define qual_isUndef(q) ((q) == QU_UNDEF)
194# define qual_isKilled(q) ((q) == QU_KILLED)
1ac6313d 195# define qual_isNullTerminated(q) ((q) == QU_NULLTERMINATED)
885824d3 196
197extern qual qual_createTrueNull (void) /*@*/ ;
198extern qual qual_createFalseNull (void) /*@*/ ;
199extern qual qual_createRefCounted (void) /*@*/ ;
200extern qual qual_createRefs (void) /*@*/ ;
201extern qual qual_createNewRef (void) /*@*/ ;
202extern qual qual_createKillRef (void) /*@*/ ;
203extern qual qual_createTempRef (void) /*@*/ ;
204extern qual qual_createNotNull (void) /*@*/ ;
205extern qual qual_createAbstract (void) /*@*/ ;
206extern qual qual_createConcrete (void) /*@*/ ;
207extern qual qual_createMutable (void) /*@*/ ;
208extern qual qual_createImmutable (void) /*@*/ ;
209extern qual qual_createShort (void) /*@*/ ;
210extern qual qual_createLong (void) /*@*/ ;
211extern qual qual_createSigned (void) /*@*/ ;
212extern qual qual_createUnsigned (void) /*@*/ ;
213extern qual qual_createUnique (void) /*@*/ ;
214extern qual qual_createMayExit (void) /*@*/ ;
215extern qual qual_createExits (void) /*@*/ ;
216extern qual qual_createNeverExit (void) /*@*/ ;
217extern qual qual_createFalseExit (void) /*@*/ ;
218extern qual qual_createTrueExit (void) /*@*/ ;
219extern qual qual_createConst (void) /*@*/ ;
220extern qual qual_createVolatile (void) /*@*/ ;
221extern qual qual_createInline (void) /*@*/ ;
222extern qual qual_createExtern (void) /*@*/ ;
223extern qual qual_createStatic (void) /*@*/ ;
224extern qual qual_createAuto (void) /*@*/ ;
225extern qual qual_createRegister (void) /*@*/ ;
226extern qual qual_createOut (void) /*@*/ ;
227extern qual qual_createIn (void) /*@*/ ;
228extern qual qual_createYield (void) /*@*/ ;
229extern qual qual_createOnly (void) /*@*/ ;
230extern qual qual_createOwned (void) /*@*/ ;
231extern qual qual_createDependent (void) /*@*/ ;
232extern qual qual_createRelDef (void) /*@*/ ;
233extern qual qual_createImpOnly (void) /*@*/ ;
234extern qual qual_createPartial (void) /*@*/ ;
235extern qual qual_createSpecial (void) /*@*/ ;
236extern qual qual_createKeep (void) /*@*/ ;
237extern qual qual_createKept (void) /*@*/ ;
238extern qual qual_createTemp (void) /*@*/ ;
239extern qual qual_createShared (void) /*@*/ ;
240extern qual qual_createNull (void) /*@*/ ;
241extern qual qual_createRelNull (void) /*@*/ ;
242extern qual qual_createReturned (void) /*@*/ ;
243extern qual qual_createExposed (void) /*@*/ ;
244extern qual qual_createObserver (void) /*@*/ ;
245extern qual qual_createUnused (void) /*@*/ ;
246extern qual qual_createExternal (void) /*@*/ ;
247extern qual qual_createSef (void) /*@*/ ;
248extern qual qual_createChecked (void) /*@*/ ;
249extern qual qual_createCheckMod (void) /*@*/ ;
250extern qual qual_createUnchecked (void) /*@*/ ;
251extern qual qual_createCheckedStrict (void) /*@*/ ;
252extern qual qual_createUndef (void) /*@*/ ;
253extern qual qual_createKilled (void) /*@*/ ;
1ac6313d 254extern qual qual_createNullTerminated (void) /*@*/ ;
885824d3 255
256# ifndef NOLCL
257extern qual qual_createUnknown (void) /*@*/ ;
258# define qual_createUnknown() (QU_UNKNOWN)
259
260extern qual qual_createPrintfLike (void) /*@*/ ;
261extern qual qual_createScanfLike (void) /*@*/ ;
262extern qual qual_createMessageLike (void) /*@*/ ;
263
264# define qual_createPrintfLike() (QU_PRINTFLIKE)
265# define qual_createScanfLike() (QU_SCANFLIKE)
266# define qual_createMessageLike() (QU_MESSAGELIKE)
267# endif
268
269# define qual_createTrueNull() (QU_TRUENULL)
270# define qual_createFalseNull() (QU_FALSENULL)
271# define qual_createRefCounted() (QU_REFCOUNTED)
272# define qual_createRefs() (QU_REFS)
273# define qual_createNewRef() (QU_NEWREF)
274# define qual_createKillRef() (QU_KILLREF)
275# define qual_createTempRef() (QU_TEMPREF)
276# define qual_createNotNull() (QU_NOTNULL)
277# define qual_createAbstract() (QU_ABSTRACT)
278# define qual_createConcrete() (QU_CONCRETE)
279# define qual_createMutable() (QU_MUTABLE)
280# define qual_createImmutable() (QU_IMMUTABLE)
281# define qual_createShort() (QU_SHORT)
282# define qual_createLong() (QU_LONG)
283# define qual_createSigned() (QU_SIGNED)
284# define qual_createUnsigned() (QU_UNSIGNED)
285# define qual_createUnique() (QU_UNIQUE)
286# define qual_createMayExit() (QU_MAYEXIT)
287# define qual_createExits() (QU_EXITS)
288# define qual_createNeverExit() (QU_NEVEREXIT)
289# define qual_createTrueExit() (QU_TRUEEXIT)
290# define qual_createFalseExit() (QU_FALSEEXIT)
291# define qual_createConst() (QU_CONST)
292# define qual_createVolatile() (QU_VOLATILE)
293# define qual_createInline() (QU_INLINE)
294# define qual_createExtern() (QU_EXTERN)
295# define qual_createStatic() (QU_STATIC)
296# define qual_createAuto() (QU_AUTO)
297# define qual_createRegister() (QU_REGISTER)
298# define qual_createOut() (QU_OUT)
299# define qual_createIn() (QU_IN)
300# define qual_createYield() (QU_YIELD)
301# define qual_createOnly() (QU_ONLY)
302# define qual_createOwned() (QU_OWNED)
303# define qual_createDependent() (QU_DEPENDENT)
304# define qual_createRelDef() (QU_RELDEF)
305# define qual_createImpOnly() (QU_IMPONLY)
306# define qual_createPartial() (QU_PARTIAL)
307# define qual_createSpecial() (QU_SPECIAL)
308# define qual_createKeep() (QU_KEEP)
309# define qual_createKept() (QU_KEPT)
310# define qual_createTemp() (QU_TEMP)
311# define qual_createShared() (QU_SHARED)
312# define qual_createNull() (QU_NULL)
313# define qual_createRelNull() (QU_RELNULL)
314# define qual_createReturned() (QU_RETURNED)
315# define qual_createExposed() (QU_EXPOSED)
316# define qual_createObserver() (QU_OBSERVER)
317# define qual_createUnused() (QU_UNUSED)
318# define qual_createExternal() (QU_EXTERNAL)
319# define qual_createSef() (QU_SEF)
320# define qual_createChecked() (QU_CHECKED)
321# define qual_createCheckMod() (QU_CHECKMOD)
322# define qual_createCheckedStrict() (QU_CHECKEDSTRICT)
323# define qual_createUnchecked() (QU_UNCHECKED)
324# define qual_createUndef() (QU_UNDEF)
325# define qual_createKilled() (QU_KILLED)
1ac6313d 326# define qual_createNullTerminated() (QU_NULLTERMINATED)
11ed4f45 327# define qual_createSetBufferSize() (QU_SETBUFFERSIZE)
885824d3 328
329extern bool qual_isGlobCheck (/*@sef@*/ qual p_q) /*@*/ ;
330# define qual_isGlobCheck(q) \
331 (qual_isChecked (q) || qual_isCheckMod (q) \
332 || qual_isUnchecked (q) || qual_isCheckedStrict (q))
333
334# define qual_isNullPred(q) \
335 (qual_isTrueNull (q) || qual_isFalseNull (q))
336
337# define qual_isRefQual(q) \
338 (qual_isRefCounted(q) || qual_isRefs(q) || qual_isNewRef (q) || \
339 qual_isKillRef (q) || qual_isTempRef (q))
340
341# define qual_isTypeQual(q) \
342 (qual_isAbstract(q) || qual_isMutable(q) || qual_isImmutable(q))
343
344# define qual_isControlQual(q) (qual_isExits(q) || qual_isMayExit (q))
345# define qual_isStorageClass(q) (qual_isExtern(q) || qual_isStatic(q))
346# define qual_isCQual(q) \
347 (qual_isAuto(q) || qual_isRegister(q) || qual_isInline(q) \
348 || qual_isConst(q) || qual_isVolatile(q) || qual_isShort(q) \
349 || qual_isLong (q) || qual_isSigned (q) || qual_isUnsigned (q))
350
351# define qual_isAllocQual(q) \
352 (qual_isOut (q) || qual_isIn (q) || qual_isSpecial (q) \
353 || qual_isPartial (q) || qual_isRelDef (q))
354
1ac6313d 355/* start modifications */
356/* This is used to check if we the qualifier matches any of the
357len/size/nullterminated types */
358
359# define qual_isBufQualifier(q) \
360 (qual_isNullTerminated(q))
361
362/* end of modification/s */
363
885824d3 364# define qual_isGlobalQual(q) \
365 (qual_isUndef(q) || qual_isKilled (q))
366
367# define qual_isImplied(q) (qual_isImpOnly(q))
368
369# define qual_isExQual(q) (qual_isExposed (q) || qual_isObserver (q))
370
371# define qual_isAliasQual(q) \
372 (qual_isOnly(q) || qual_isImpOnly(q) || qual_isTemp(q) \
373 || qual_isOwned (q) || qual_isShared (q) || qual_isUnique (q) \
374 || qual_isDependent (q) || qual_isKeep (q) || qual_isKept (q))
375
376extern bool qual_isExitQual (/*@sef@*/ qual p_q) /*@*/ ;
377# define qual_isExitQual(q) \
378 (qual_isExits (q) || qual_isNeverExit (q) || qual_isMayExit (q) \
379 || qual_isTrueExit (q) || qual_isFalseExit (q))
380
381# else
382# error "Multiple include"
383# endif
384
385
This page took 0.3452 seconds and 5 git commands to generate.