From 1bd3b025e65aa3d7b45ecf8f3f0d832197cd997f Mon Sep 17 00:00:00 2001 From: drl7x Date: Sun, 29 Apr 2001 20:19:14 +0000 Subject: [PATCH] Simple modification to tests. --- test/db1.out | 691 +++++++++++++++++++++++- test/db1/employee.lcs | 4 +- test/db1/empset.lcs | 43 +- test/funcpointer.out | 3 - test/help.out | 2 + test/null6.lcd | 4 +- test/simplebufferConstraintTests.expect | 6 +- test/tests2.5/newlint.lcd | 2 +- 8 files changed, 723 insertions(+), 32 deletions(-) diff --git a/test/db1.out b/test/db1.out index c79007f..e4ba09d 100644 --- a/test/db1.out +++ b/test/db1.out @@ -1,2 +1,689 @@ -dbase.lcl:2:1: Cannot find standard import file: stdio.lcs -*** Cannot continue. + +< reading spec bool.lcl > +< reading spec employee.lcl > +< reading spec eref.lcl > +< reading spec empset.lcl > +< reading spec ereftab.lcl > +< reading spec erc.lcl > +< reading spec dbase.lcl > +< preprocessing > +< checking employee.c > +employee.c: (in function employee_equal) +employee.c:24: Function strncmp expects arg 3 to be size_t gets int: + maxEmployeeName +< checking eref.c > +< checking empset.c > +empset.c: (in function empset_insert) +empset.c:28: Variable er declared but not used +empset.c: (in function empset_disjointUnion) +empset.c:85: Undocumented modification of s1 possible from call to + erc_iterStart (through alias s2): erc_iterStart(s2) +empset.c:85: Undocumented modification of s2 possible from call to + erc_iterStart: erc_iterStart(s2) +empset.c: (in function empset_union) +empset.c:108: Undocumented modification of s2 possible from call to + erc_iterStart (through alias s1): erc_iterStart(s1) +empset.c:108: Undocumented modification of s1 possible from call to + erc_iterStart: erc_iterStart(s1) +empset.c: (in function empset_subset) +empset.c:139: Undocumented modification of s1 possible from call to + erc_iterStart: erc_iterStart(s1) +empset.c:135: Variable e declared but not used +< checking ereftab.c > +ereftab.c: (in function ereftab_lookup) +ereftab.c:34: Undocumented modification of t possible from call to + erc_iterStart: erc_iterStart(t) +< checking erc.c > +erc.c: (in function erc_member) +erc.c:47: Operands of == are abstract type (eref): tmpc->val == er +erc.c: (in function erc_delete) +erc.c:78: Operands of == are abstract type (eref): elem->val == er +erc.c: (in function erc_sprint) +erc.c:141: Function malloc expects arg 1 to be size_t gets int: + erc_size(c) * (employeePrintSize + 1) + 1 +erc.c:151: Undocumented modification of c possible from call to erc_iterStart: + erc_iterStart(c) +< checking dbase.c > +dbase.c: (in function query) +dbase.c:210: Variable er declared but not used +dbase.c:211: Variable e declared but not used +< checking drive.c > +drive.c: (in function main) +drive.c:123: Return value (type db_status) ignored: hire(e) +< checking macros bool.h > +< global checks > +< cleaning .......... > + +Finished LCLint checking --- 16 code errors found, as expected + +< reading spec bool.lcl > +< reading spec employee.lcl > +< reading spec eref.lcl > +< reading spec empset.lcl > +< reading spec ereftab.lcl > +< reading spec erc.lcl > +< reading spec dbase.lcl > +< preprocessing > +employee.h:2: Name EMPLOYEE_H is reserved for future ANSI library extensions. + Macros beginning with E and a digit or uppercase letter may be added to + . (See ANSI, Section 4.13.1) +< more preprocessing . > +eref.h:2: Name EREF_H is reserved for future ANSI library extensions. Macros + beginning with E and a digit or uppercase letter may be added to . + (See ANSI, Section 4.13.1) +< more preprocessing . > +empset.h:2: Name EMPSET_H is reserved for future ANSI library extensions. + Macros beginning with E and a digit or uppercase letter may be added to + . (See ANSI, Section 4.13.1) +< more preprocessing . > +erc.h:2: Name ERC_H is reserved for future ANSI library extensions. Macros + beginning with E and a digit or uppercase letter may be added to . + (See ANSI, Section 4.13.1) +< more preprocessing . > +ereftab.h:4: Name EREFTAB_H is reserved for future ANSI library extensions. + Macros beginning with E and a digit or uppercase letter may be added to + . (See ANSI, Section 4.13.1) +< more preprocessing . > +< checking employee.c > +bool.h:20: Modifies list for bool_initMod uses global internal state, not + included in globals list. + bool.h:20: Declaration of bool_initMod +employee.c: (in function employee_setName) +employee.c:11: Body of if statement is not a block: return FALSE +employee.c:14: Parameter 1 (e->name) to function strcpy is declared unique but + may be aliased externally by parameter 2 (na) +employee.c: (in function employee_equal) +employee.c:24: Function strncmp expects arg 3 to be size_t gets int: + maxEmployeeName +employee.c: (in function employee_sprint) +employee.c:29: Read-only string literal storage used as initial value for + unqualified storage: gender[0] = "male" +employee.c:29: Read-only string literal storage used as initial value for + unqualified storage: gender[1] = "female" +employee.c:29: Read-only string literal storage used as initial value for + unqualified storage: gender[2] = "?" +employee.c:30: Read-only string literal storage used as initial value for + unqualified storage: jobs[0] = "manager" +employee.c:30: Read-only string literal storage used as initial value for + unqualified storage: jobs[1] = "non-manager" +employee.c:30: Read-only string literal storage used as initial value for + unqualified storage: jobs[2] = "?" +employee.c:33: Array fetch using non-integer, gender: gender[e.gen] +employee.c:33: Array fetch using non-integer, job: jobs[e.j] +employee.h: (in macro employee_initMod) +employee.h:10: Called procedure bool_initMod may access internal state, but + globals list does not include globals internalState +employee.h:10: Undocumented modification of internal state possible from call + to bool_initMod: bool_initMod() +< checking eref.c > +eref.h:9: Constant exported, but not specified: used +eref.h:9: Constant exported, but not specified: avail +eref.h:9: Type exported, but not specified: eref_status +eref.h:14: Type exported, but not specified: eref_ERP +eref.h:17: Variable exported, but not specified: eref_Pool +eref.c: (in function eref_alloc) +eref.c:12: Undocumented use of global eref_Pool +eref.c:12: Undocumented use of global eref_Pool +eref.c:12: Body of for statement is empty +eref.c:12: Undocumented use of global eref_Pool (in post loop test) +eref.c:16: Undocumented use of global eref_Pool +eref.c:18: Undocumented use of global eref_Pool +eref.c:19: Undocumented use of global eref_Pool +eref.c:20: Undocumented use of global eref_Pool +eref.c:20: Parameter to sizeof is type employee: sizeof(employee) +eref.c:19: Undocumented modification of *(eref_Pool.conts) possible from call + to realloc: realloc(eref_Pool.conts, 2 * eref_Pool.size * sizeof(employee)) +eref.c:18: Undocumented modification of eref_Pool.conts: + eref_Pool.conts = (employee *)realloc(eref_Pool.conts, 2 * eref_Pool.size * + sizeof(employee)) +eref.c:22: Undocumented use of global eref_Pool +eref.c:25: Argument to exit has implementation defined behavior: 1 +eref.c:28: Undocumented use of global eref_Pool +eref.c:29: Undocumented use of global eref_Pool +eref.c:30: Undocumented use of global eref_Pool +eref.c:30: Parameter to sizeof is type eref_status: sizeof(eref_status) +eref.c:29: Undocumented modification of *(eref_Pool.status) possible from call + to realloc: realloc(eref_Pool.status, 2 * eref_Pool.size * + sizeof(eref_status)) +eref.c:28: Undocumented modification of eref_Pool.status: + eref_Pool.status = (eref_status *)realloc(eref_Pool.status, 2 * + eref_Pool.size * sizeof(eref_status)) +eref.c:32: Undocumented use of global eref_Pool +eref.c:35: Argument to exit has implementation defined behavior: 1 +eref.c:38: Undocumented use of global eref_Pool +eref.c:38: Undocumented use of global eref_Pool +eref.c:38: Undocumented modification of eref_Pool.size: + eref_Pool.size = 2 * eref_Pool.size +eref.c:40: Undocumented use of global eref_Pool +eref.c:41: Undocumented use of global eref_Pool +eref.c:41: Undocumented modification of eref_Pool.status[]: + eref_Pool.status[i] = avail +eref.c:41: Body of for statement is not a block: eref_Pool.status[i] = avail +eref.c:41: Undocumented use of global eref_Pool (in post loop test) +eref.c:44: Undocumented use of global eref_Pool +eref.c:44: Undocumented modification of eref_Pool.status[]: + eref_Pool.status[res] = used +eref.c: (in function eref_initMod) +eref.c:53: Undocumented use of file static needsInit +eref.c:58: Undocumented use of file static needsInit +eref.c:58: Undocumented modification of needsInit: needsInit = FALSE +eref.c:60: Statement has no effect: employee_initMod() +eref.c:62: Undocumented use of global eref_Pool +eref.c:62: Parameter to sizeof is type employee: sizeof(employee) +eref.c:62: Undocumented modification of eref_Pool.conts: + eref_Pool.conts = (employee *)malloc(size * sizeof(employee)) +eref.c:62: Implicitly only storage eref_Pool.conts not released before + assignment: eref_Pool.conts = (employee *)malloc(size * sizeof(employee)) +eref.c:64: Undocumented use of global eref_Pool +eref.c:67: Argument to exit has implementation defined behavior: 1 +eref.c:70: Undocumented use of global eref_Pool +eref.c:70: Parameter to sizeof is type eref_status: sizeof(eref_status) +eref.c:70: Undocumented modification of eref_Pool.status: + eref_Pool.status = (eref_status *)malloc(size * sizeof(eref_status)) +eref.c:70: Implicitly only storage eref_Pool.status not released before + assignment: eref_Pool.status = (eref_status *)malloc(size * + sizeof(eref_status)) +eref.c:72: Undocumented use of global eref_Pool +eref.c:75: Argument to exit has implementation defined behavior: 1 +eref.c:78: Undocumented use of global eref_Pool +eref.c:78: Undocumented modification of eref_Pool.size: eref_Pool.size = size +eref.c:82: Undocumented use of global eref_Pool +eref.c:82: Undocumented modification of eref_Pool.status[]: + eref_Pool.status[i] = avail +eref.c:84: Global storage *(eref_Pool.conts) contains 4 undefined fields when + call returns: ssNum, salary, gen, j +eref.c:84: Global storage eref_Pool contains 1 undefined field when call + returns: status +eref.h: (in macro eref_free) +eref.h:23: Undocumented use of global eref_Pool +eref.h:23: Undocumented modification of eref_Pool.status[]: + eref_Pool.status[er] = avail +eref.h: (in macro eref_assign) +eref.h:24: Undocumented use of global eref_Pool +eref.h:24: Macro parameter used without parentheses: e +eref.h:24: Undocumented modification of eref_Pool.conts[]: + eref_Pool.conts[er] = e +eref.h: (in macro eref_get) +eref.h:25: Undocumented use of global eref_Pool +eref.h: (in macro eref_equal) +eref.h:26: Macro parameter used without parentheses: er1 +eref.h:26: Macro parameter used without parentheses: er2 +< checking empset.c > +erc.h:6: Type exported, but not specified: ercElem +erc.h:7: Type exported, but not specified: ercList +erc.h:8: Type exported, but not specified: ercInfo +empset.h:10: Variable exported, but not specified: known +empset.c:5: Name _empset_get is in the implementation name space (any + identifier beginning with underscore) +empset.c: (in function _empset_get) +empset.c:11: Undocumented modification of s possible from call to + erc_iterStart: erc_iterStart(s) +empset.c:15: Body of if statement is not a block: + do { { erc_iterFinal(it) } } while (FALSE) +empset.c: (in function empset_insert) +empset.c:30: Undetected modification possible from call to unconstrained + function _empset_get: _empset_get +empset.c:28: Variable er declared but not used +empset.c: (in function empset_insertUnique) +empset.c:43: Undocumented use of global known +empset.c:49: Undocumented use of global known +empset.c:49: Undocumented modification of known possible from call to + ereftab_insert: ereftab_insert(known, e, er) +empset.c: (in function empset_delete) +empset.c:59: Undetected modification possible from call to unconstrained + function _empset_get: _empset_get +empset.c: (in function empset_disjointUnion) +empset.c:85: Undocumented modification of s1 possible from call to + erc_iterStart (through alias s2): erc_iterStart(s2) +empset.c:85: Undocumented modification of s2 possible from call to + erc_iterStart: erc_iterStart(s2) +empset.c:86: Body of for statement is not a block: + empset_insertUnique(result, eref_get(er)) +empset.c: (in function empset_union) +empset.c:108: Undocumented modification of s2 possible from call to + erc_iterStart (through alias s1): erc_iterStart(s1) +empset.c:108: Undocumented modification of s1 possible from call to + erc_iterStart: erc_iterStart(s1) +empset.c:110: Body of if statement is not a block: erc_insert(result, er) +empset.c:109: Body of for statement is not a block: + if (!empset_member(eref_get(er), s2)) erc_insert(result, er) +empset.c: (in function empset_intersect) +empset.c:125: Body of if statement is not a block: erc_insert(toDelete, er) +empset.c:124: Body of for statement is not a block: + if (!empset_member(eref_get(er), s2)) erc_insert(toDelete, er) +empset.c:128: Return value (type bool) ignored: erc_delete(s1, er) +empset.c:128: Body of for statement is not a block: erc_delete(s1, er) +empset.c: (in function empset_subset) +empset.c:139: Undocumented modification of s1 possible from call to + erc_iterStart: erc_iterStart(s1) +empset.c:141: Body of if statement is not a block: + do { { erc_iterFinal(it) } } while (FALSE) +empset.c:140: Body of for statement is not a block: + if (!empset_member(eref_get(er), s2)) do { { erc_iterFinal(it) + } } while (FALSE) +empset.c:135: Variable e declared but not used +empset.c: (in function empset_initMod) +empset.c:148: Undocumented use of file static initDone +empset.c:148: Body of if statement is not a block: return +empset.c:151: Statement has no effect: employee_initMod() +empset.c:153: Statement has no effect: erc_initMod() +empset.c:154: Statement has no effect: ereftab_initMod() +empset.c:155: Undocumented use of global known +empset.c:155: Undocumented modification of known: known = ereftab_create() +empset.c:156: Undocumented use of file static initDone +empset.c:156: Undocumented modification of initDone: initDone = TRUE +empset.h: (in macro empset_member) +empset.h:30: Undetected modification possible from call to unconstrained + function _empset_get: _empset_get +< checking ereftab.c > +ereftab.c: (in function ereftab_delete) +ereftab.c:24: Return value (type bool) ignored: erc_delete(t, er) +ereftab.c: (in function ereftab_lookup) +ereftab.c:34: Undocumented modification of t possible from call to + erc_iterStart: erc_iterStart(t) +ereftab.c:37: Body of if statement is not a block: return er +ereftab.c: (in function ereftab_initMod) +ereftab.c:47: Statement has no effect: erc_initMod() +< checking erc.c > +erc.c: (in function erc_create) +erc.c:8: Parameter to sizeof is type ercInfo: sizeof(ercInfo) +erc.c:13: Argument to exit has implementation defined behavior: 1 +erc.c:18: Null storage c->vals derivable from return value: c + erc.c:16: Storage c->vals becomes null +erc.c:18: Fresh storage returned as unqualified (should be only): c + erc.c:8: Fresh storage c allocated +erc.c: (in function erc_clear) +erc.c:34: Function returns with null storage derivable from parameter c->vals + erc.c:32: Storage c->vals becomes null +erc.c: (in function erc_final) +erc.c:39: Implicitly temp storage c passed as only param: free (c) +erc.c: (in function erc_member) +erc.c:47: Operands of == are abstract type (eref): tmpc->val == er +erc.c:47: Body of if statement is not a block: return TRUE +erc.c:47: Body of for statement is not a block: + if (tmpc->val == er) return TRUE +erc.c: (in function erc_insert) +erc.c:55: Parameter to sizeof is type ercElem: sizeof(ercElem) +erc.c:60: Argument to exit has implementation defined behavior: 1 +erc.c: (in function erc_delete) +erc.c:78: Operands of == are abstract type (eref): elem->val == er +erc.c:83: Implicitly only storage prev->next not released before assignment: + prev->next = elem->next +erc.c:83: Clauses exit with elem referencing implicitly only storage in true + branch, local storage in false branch + erc.c:81: Storage elem becomes implicitly only +erc.c:83: Storage c->vals->next is kept in one path, but live in another. + erc.c:83: Storage c->vals->next becomes kept +erc.c:81: Body of if clause of if statement is not a block: + c->vals = elem->next +erc.c:83: Body of else clause of if statement is not a block: + prev->next = elem->next +erc.c:87: Released storage c->vals reachable from parameter at return point + erc.c:85: Storage c->vals is released +erc.c: (in function erc_iterStart) +erc.c:98: Parameter to sizeof is type ercList: sizeof(ercList) +erc.c:103: Argument to exit has implementation defined behavior: 1 +erc.c:107: Fresh storage returned as unqualified (should be only): result + erc.c:98: Fresh storage result allocated +erc.c:108: Suspect object listed in modifies of erc_iterStart not modified: c + erc.lcl:49: Specification of erc_iterStart +erc.c: (in function erc_yield) +erc.c:117: Implicitly temp storage it passed as only param: free (it) +erc.c:117: Unreachable code: free(it) +erc.c:118: Variable it is released in true branch, but live in continuation. + erc.c:117: Storage it is released +erc.c:121: Only storage *it->next assigned to unqualified: *(it) = (*it)->next +erc.c: (in function erc_join) +erc.c:130: Body of for statement is not a block: erc_insert(c1, tmpc->val) +erc.c: (in function erc_sprint) +erc.c:141: Function malloc expects arg 1 to be size_t gets int: + erc_size(c) * (employeePrintSize + 1) + 1 +erc.c:146: Argument to exit has implementation defined behavior: 1 +erc.c:151: Undocumented modification of c possible from call to erc_iterStart: + erc_iterStart(c) +erc.c:159: Fresh storage returned as unqualified (should be only): result + erc.c:140: Fresh storage result allocated +erc.h: (in macro erc_choose) +erc.h:15: Macro parameter used without parentheses: c +erc.h: (in macro erc_initMod) +erc.h:16: Called procedure bool_initMod may access internal state, but globals + list does not include globals internalState +erc.h:16: Undocumented modification of internal state possible from call to + bool_initMod: bool_initMod() +erc.h:16: Statement has no effect: employee_initMod() +erc.h: (in macro erc_iterFinal) +erc.h:20: Implicitly temp storage it passed as only param: free (it) +< checking dbase.c > +dbase.c: (in function db_initMod) +dbase.c:21: Undocumented use of global initDone +dbase.c:27: Statement has no effect: employee_initMod() +dbase.c:29: Statement has no effect: erc_initMod() +dbase.c:30: Statement has no effect: empset_initMod() +dbase.c:32: Assignment of enum { mMGRS, fMGRS, mNON, fNON } to int: i = mMGRS +dbase.c:32: Operands of <= have incompatible types (int, enum { mMGRS, fMGRS, + mNON, fNON }): i <= fNON +dbase.c:34: Undocumented use of global db +dbase.c:34: Undocumented modification of db[]: db[i] = erc_create() +dbase.c:32: Incompatible types for <= (int, enum { mMGRS, fMGRS, mNON, fNON }) + (in post loop test): i <= fNON +dbase.c:37: Undocumented use of global initDone +dbase.c:37: Undocumented modification of initDone: initDone = TRUE +dbase.c:40: Name _db_ercKeyGet is in the implementation name space (any + identifier beginning with underscore) +dbase.c: (in function _db_ercKeyGet) +dbase.c:45: Undocumented modification of c possible from call to erc_iterStart: + erc_iterStart(c) +dbase.c:56: Name _db_keyGet is in the implementation name space (any identifier + beginning with underscore) +dbase.c: (in function _db_keyGet) +dbase.c:61: Assignment of enum { mMGRS, fMGRS, mNON, fNON } to int: i = mMGRS +dbase.c:61: Operands of <= have incompatible types (int, enum { mMGRS, fMGRS, + mNON, fNON }): i <= fNON +dbase.c:63: Undocumented use of global db +dbase.c:63: Undetected modification possible from call to unconstrained + function _db_ercKeyGet: _db_ercKeyGet +dbase.c:61: Incompatible types for <= (int, enum { mMGRS, fMGRS, mNON, fNON }) + (in post loop test): i <= fNON +dbase.c:73: Name _db_addEmpls is in the implementation name space (any + identifier beginning with underscore) +dbase.c: (in function _db_addEmpls) +dbase.c:81: Undocumented modification of c possible from call to erc_iterStart: + erc_iterStart(c) +dbase.c:86: Undocumented modification of s possible from call to empset_insert: + empset_insert(s, e) +dbase.c:86: Return value (type bool) ignored: empset_insert(s, e) +dbase.c: (in function hire) +dbase.c:97: Body of if statement is not a block: return genderERR +dbase.c:100: Body of if statement is not a block: return jobERR +dbase.c:103: Body of if statement is not a block: return salERR +dbase.c:105: Undetected modification possible from call to unconstrained + function _db_keyGet: _db_keyGet +dbase.c:106: Body of if statement is not a block: return duplERR +dbase.c: (in function uncheckedHire) +dbase.c:121: Undocumented use of global db +dbase.c:121: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mMGRS] +dbase.c:121: Undocumented modification of db[] possible from call to + erc_insert: erc_insert(db[mMGRS], er) +dbase.c:123: Undocumented use of global db +dbase.c:123: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mNON] +dbase.c:123: Undocumented modification of db[] possible from call to + erc_insert: erc_insert(db[mNON], er) +dbase.c:121: Body of if clause of if statement is not a block: + erc_insert(db[mMGRS], er) +dbase.c:123: Body of else clause of if statement is not a block: + erc_insert(db[mNON], er) +dbase.c:126: Undocumented use of global db +dbase.c:126: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fMGRS] +dbase.c:126: Undocumented modification of db[] possible from call to + erc_insert: erc_insert(db[fMGRS], er) +dbase.c:128: Undocumented use of global db +dbase.c:128: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fNON] +dbase.c:128: Undocumented modification of db[] possible from call to + erc_insert: erc_insert(db[fNON], er) +dbase.c:126: Body of if clause of if statement is not a block: + erc_insert(db[fMGRS], er) +dbase.c:128: Body of else clause of if statement is not a block: + erc_insert(db[fNON], er) +dbase.c:123: Body of if clause of if statement is not a block: + if (e.j == MGR) erc_insert(db[mMGRS], er) else erc_insert(db[mNON], er) +dbase.c: (in function fire) +dbase.c:137: Assignment of enum { mMGRS, fMGRS, mNON, fNON } to int: i = mMGRS +dbase.c:137: Operands of <= have incompatible types (int, enum { mMGRS, fMGRS, + mNON, fNON }): i <= fNON +dbase.c:138: Undocumented use of global db +dbase.c:138: Undocumented modification of db[] possible from call to + erc_iterStart: erc_iterStart(db[i]) +dbase.c:142: Undocumented use of global db +dbase.c:142: Undocumented modification of db[] possible from call to + erc_delete: erc_delete(db[i], er) +dbase.c:142: Return value (type bool) ignored: erc_delete(db[i]... +dbase.c:139: Body of for statement is not a block: + if (eref_get(er).ssNum == ssNum) { erc_iterFinal(it) } +dbase.c:139: Body of for statement is not a block: + for (er = erc_yield(it = erc_iterStart(db[i])); !eref_equal(er, erefNIL); + er = erc_yield(it)) if (eref_get(er).ssNum == ssNum) { erc_iterFinal(it) } +dbase.c:137: Incompatible types for <= (int, enum { mMGRS, fMGRS, mNON, fNON }) + (in post loop test): i <= fNON +dbase.c: (in function promote) +dbase.c:156: Undocumented use of global db +dbase.c:156: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mNON] +dbase.c:156: Undetected modification possible from call to unconstrained + function _db_ercKeyGet: _db_ercKeyGet +dbase.c:160: Undocumented use of global db +dbase.c:160: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fNON] +dbase.c:160: Undetected modification possible from call to unconstrained + function _db_ercKeyGet: _db_ercKeyGet +dbase.c:162: Body of if statement is not a block: return FALSE +dbase.c:172: Undocumented use of global db +dbase.c:172: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mNON] +dbase.c:172: Undocumented modification of db[] possible from call to + erc_delete: erc_delete(db[mNON], er) +dbase.c:172: Return value (type bool) ignored: erc_delete(db[mN... +dbase.c:173: Undocumented use of global db +dbase.c:173: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mMGRS] +dbase.c:173: Undocumented modification of db[] possible from call to + erc_insert: erc_insert(db[mMGRS], er) +dbase.c:177: Undocumented use of global db +dbase.c:177: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fNON] +dbase.c:177: Undocumented modification of db[] possible from call to + erc_delete: erc_delete(db[fNON], er) +dbase.c:177: Return value (type bool) ignored: erc_delete(db[fN... +dbase.c:178: Undocumented use of global db +dbase.c:178: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fMGRS] +dbase.c:178: Undocumented modification of db[] possible from call to + erc_insert: erc_insert(db[fMGRS], er) +dbase.c: (in function setSalary) +dbase.c:194: Undetected modification possible from call to unconstrained + function _db_keyGet: _db_keyGet +dbase.c: (in function query) +dbase.c:226: Assignment of enum { mMGRS, fMGRS, mNON, fNON } to int: i = mMGRS +dbase.c:226: Operands of <= have incompatible types (int, enum { mMGRS, fMGRS, + mNON, fNON }): i <= fNON +dbase.c:227: Undocumented use of global db +dbase.c:227: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:227: Body of for statement is not a block: + numAdded += _db_addEmpls(db[i], l, h, s) +dbase.c:226: Incompatible types for <= (int, enum { mMGRS, fMGRS, mNON, fNON }) + (in post loop test): i <= fNON +dbase.c:230: Undocumented use of global db +dbase.c:230: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mMGRS] +dbase.c:230: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:231: Undocumented use of global db +dbase.c:231: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fMGRS] +dbase.c:231: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:234: Undocumented use of global db +dbase.c:234: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mNON] +dbase.c:234: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:235: Undocumented use of global db +dbase.c:235: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fNON] +dbase.c:235: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:242: Undocumented use of global db +dbase.c:242: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mMGRS] +dbase.c:242: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:243: Undocumented use of global db +dbase.c:243: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mNON] +dbase.c:243: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:246: Undocumented use of global db +dbase.c:246: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mMGRS] +dbase.c:246: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:248: Undocumented use of global db +dbase.c:248: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[mNON] +dbase.c:248: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:254: Undocumented use of global db +dbase.c:254: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fMGRS] +dbase.c:254: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:255: Undocumented use of global db +dbase.c:255: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fNON] +dbase.c:255: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:258: Undocumented use of global db +dbase.c:258: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fMGRS] +dbase.c:258: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:260: Undocumented use of global db +dbase.c:260: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: + db[fNON] +dbase.c:260: Undetected modification possible from call to unconstrained + function _db_addEmpls: _db_addEmpls +dbase.c:210: Variable er declared but not used +dbase.c:211: Variable e declared but not used +dbase.c:263: Suspect object listed in modifies of query not modified: s + dbase.lcl:49: Specification of query +dbase.c: (in function db_print) +dbase.c:272: Assignment of enum { mMGRS, fMGRS, mNON, fNON } to int: i = mMGRS +dbase.c:272: Operands of <= have incompatible types (int, enum { mMGRS, fMGRS, + mNON, fNON }): i <= fNON +dbase.c:274: Undocumented use of global db +dbase.c:272: Incompatible types for <= (int, enum { mMGRS, fMGRS, mNON, fNON }) + (in post loop test): i <= fNON +< checking drive.c > +drive.c: (in function main) +drive.c:22: Statement has no effect: employee_initMod() +drive.c:23: Statement has no effect: empset_initMod() +drive.c:48: Return value (type bool) ignored: employee_setName... +drive.c:49: Return value (type bool) ignored: empset_insert(em... +drive.c:64: Return value (type bool) ignored: employee_setName... +drive.c:65: Return value (type bool) ignored: empset_delete(em... +drive.c:82: Return value (type bool) ignored: employee_setName... +drive.c:83: Return value (type bool) ignored: empset_insert(em... +drive.c:107: Return value (type bool) ignored: empset_delete(em... +drive.c:116: Body of if clause of if statement is not a block: e.gen = MALE +drive.c:116: Body of else clause of if statement is not a block: e.gen = FEMALE +drive.c:117: Body of if clause of if statement is not a block: e.j = NONMGR +drive.c:117: Body of else clause of if statement is not a block: e.j = MGR +drive.c:119: Return value (type bool) ignored: employee_setName... +drive.c:123: Return value (type db_status) ignored: hire(e) +drive.c:127: Assignment of db_status to int: j = hire(e) +drive.c:131: Variable j used before definition +drive.c:134: Return value (type bool) ignored: fire(17) +drive.c:158: Return value (type bool) ignored: fire(empset_choo... +drive.c:11: Parameter argv not used +< checking macros bool.h > +< global checks > +dbase.c:11: Type employeeKinds declared but not used +eref.lh:8: Function exported but not used outside eref: eref_free + eref.h:23: Definition of eref_free +empset.lh:8: Function exported but not used outside empset: empset_final + empset.h:29: Definition of empset_final +empset.lh:9: Function exported but not used outside empset: empset_clear + empset.c:24: Definition of empset_clear +empset.lh:11: Function exported but not used outside empset: + empset_insertUnique + empset.c:53: Definition of empset_insertUnique +empset.lh:17: Function exported but not used outside empset: empset_member + empset.h:30: Definition of empset_member +empset.lh:18: Function exported but not used outside empset: empset_subset + empset.c:144: Definition of empset_subset +ereftab.lh:10: Function exported but not used outside ereftab: ereftab_delete + ereftab.c:26: Definition of ereftab_delete +dbase.c:13: Variable exported but not used outside dbase: db +dbase.lh:27: Function exported but not used outside dbase: promote + dbase.c:182: Definition of promote +dbase.lh:28: Function exported but not used outside dbase: setSalary + dbase.c:206: Definition of setSalary +empset.h:10: Variable exported but not used outside empset: known +dbase.c:15: Variable exported but not used outside dbase: initDone +dbase.c:40: Function exported but not used outside dbase: _db_ercKeyGet + dbase.c:54: Definition of _db_ercKeyGet +dbase.c:56: Function exported but not used outside dbase: _db_keyGet + dbase.c:71: Definition of _db_keyGet +dbase.c:73: Function exported but not used outside dbase: _db_addEmpls + dbase.c:92: Definition of _db_addEmpls +dbase.c:13: Variable db exported but not declared in header file +empset.c:5: Function _empset_get exported but not declared in header file + empset.c:19: Definition of _empset_get +dbase.c:15: Variable initDone exported but not declared in header file +dbase.c:40: Function _db_ercKeyGet exported but not declared in header file + dbase.c:54: Definition of _db_ercKeyGet +dbase.c:56: Function _db_keyGet exported but not declared in header file + dbase.c:71: Definition of _db_keyGet +dbase.c:73: Function _db_addEmpls exported but not declared in header file + dbase.c:92: Definition of _db_addEmpls +< cleaning .......... > + +Error Type Reported Suppressed +=================== ======== ========= +abstract 2 0 +mayaliasunique 1 0 +exitarg 8 0 +unreachable 1 0 +forempty 1 0 +forblock 11 0 +ifblock 24 0 +usedef 1 0 +noeffect 11 0 +exporttype 5 0 +exportvar 2 0 +exportconst 2 0 +globs 64 1 +internalglobs 2 0 +warnmissingglobs 1 6 +retvalother 1 0 +retvalbool 16 0 +macroparens 4 0 +usereleased 1 0 +compdef 2 0 +mustfree 3 0 +branchstate 3 2 +onlytrans 1 0 +freshtrans 3 0 +temptrans 3 2 +readonlytrans 6 0 +mods 38 0 +mustmod 2 0 +modfilesys 0 25 +modnomods 4 0 +moduncon 20 0 +modunconnomods 1 0 +ansireserved 9 0 +fcnpost 0 65 +fcnconstraint 0 14 +nullret 1 0 +nullstate 1 0 +sizeoftype 7 0 +formalarray 0 17 +type 1 0 +enumindex 24 0 +relaxtypes 15 0 +matchanyintegral 2 0 +exportlocal 15 0 +exportheader 4 0 +exportheadervar 2 0 +paramuse 1 0 +typeuse 1 0 +varuse 4 0 + ======== ========= +Total 331 132 + +Finished LCLint checking --- 331 code errors found, as expected diff --git a/test/db1/employee.lcs b/test/db1/employee.lcs index ac83dd7..977ab45 100644 --- a/test/db1/employee.lcs +++ b/test/db1/employee.lcs @@ -88,15 +88,15 @@ %LCLop 9 : -> int %LCLop MALE : -> _eemployee0e_Enum %LCLop FEMALE : -> _eemployee0e_Enum -%LCLop gender_ANY : -> _eemployee0e_Enum %LCLop __ * __ :int, int -> int %LCLop __ * __ :double, double -> double +%LCLop gender_ANY : -> _eemployee0e_Enum %LCLop true : -> bool %LCLop false : -> bool %LCLop MGR : -> _eemployee1e_Enum %LCLop NONMGR : -> _eemployee1e_Enum -%LCLop job_ANY : -> _eemployee1e_Enum %LCLop __ \and __ :bool, bool -> bool +%LCLop job_ANY : -> _eemployee1e_Enum %LCLop __ \or __ :bool, bool -> bool %LCLop __ \eq __ :bool, bool -> bool %LCLop __ \eq __ :int, int -> bool diff --git a/test/db1/empset.lcs b/test/db1/empset.lcs index dcd64b9..7566f47 100644 --- a/test/db1/empset.lcs +++ b/test/db1/empset.lcs @@ -39,6 +39,9 @@ %LCLsort __semployee0s_Struct_Arr arr _semployee0s_Struct nil %LCLsort __semployee0s_Struct_Tuple_Vec vec _semployee0s_Struct_Tuple __semployee0s_Struct_Arr %LCLsort _employee synonym _semployee0s_Struct nil +%LCLsort eref immutable nil nil +%LCLsort map immutable nil nil +%LCLsort _map_Obj obj map nil %LCLsort empset immutable nil nil %LCLsort _empset_Obj mutable empset nil %LCLSortTableEnd @@ -88,33 +91,33 @@ %LCLop 7 : -> int %LCLop 8 : -> int %LCLop 9 : -> int -%LCLtag eemployee0e enum -%LCLop gender_ANY : -> _eemployee0e_Enum -%LCLop FEMALE : -> _eemployee0e_Enum %LCLop MALE : -> _eemployee0e_Enum +%LCLop FEMALE : -> _eemployee0e_Enum %LCLop __ * __ :int, int -> int %LCLop __ * __ :double, double -> double +%LCLop gender_ANY : -> _eemployee0e_Enum %LCLop true : -> bool -%LCLtag eemployee1e enum -%LCLop job_ANY : -> _eemployee1e_Enum +%LCLtag eemployee0e enum %LCLop false : -> bool -%LCLop NONMGR : -> _eemployee1e_Enum %LCLop MGR : -> _eemployee1e_Enum +%LCLop NONMGR : -> _eemployee1e_Enum %LCLop __ \and __ :bool, bool -> bool +%LCLop job_ANY : -> _eemployee1e_Enum %LCLop __ \or __ :bool, bool -> bool -%LCLtag semployee0s struct %LCLop __ \eq __ :bool, bool -> bool %LCLop __ \eq __ :int, int -> bool %LCLop __ \eq __ :double, double -> bool %LCLop __ \eq __ :_char_Vec, _char_Vec -> bool %LCLop __ \eq __ :char, char -> bool %LCLop \not __ :bool -> bool +%LCLtag eemployee1e enum %LCLop __ \neq __ :bool, bool -> bool %LCLop __ \neq __ :int, int -> bool %LCLop __ \neq __ :double, double -> bool %LCLop __ \neq __ :_char_Vec, _char_Vec -> bool %LCLop __ \neq __ :char, char -> bool %LCLop { __ } :char -> _char_Vec +%LCLtag semployee0s struct %LCLop __ [] :__char_Obj_Ptr -> __char_Obj_Arr %LCLop __ [] :__semployee0s_Struct_Ptr -> __semployee0s_Struct_Arr %LCLop __ |- __ :_char_Vec, char -> _char_Vec @@ -129,21 +132,21 @@ %LCLop __ \geq __ :int, int -> bool %LCLop __ \geq __ :double, double -> bool %LCLop null : -> char -%LCLop __ \select j :_semployee0s_Struct_Tuple -> _eemployee1e_Enum -%LCLop __ \select j :_semployee0s_Struct -> __eemployee1e_Enum_Obj -%LCLop __ \field_arrow j :__semployee0s_Struct_Ptr -> __eemployee1e_Enum_Obj -%LCLop __ \select gen :_semployee0s_Struct_Tuple -> _eemployee0e_Enum -%LCLop __ \select gen :_semployee0s_Struct -> __eemployee0e_Enum_Obj -%LCLop __ \field_arrow gen :__semployee0s_Struct_Ptr -> __eemployee0e_Enum_Obj -%LCLop __ \select salary :_semployee0s_Struct_Tuple -> int -%LCLop __ \select salary :_semployee0s_Struct -> _int_Obj -%LCLop __ \field_arrow salary :__semployee0s_Struct_Ptr -> _int_Obj -%LCLop __ \select name :_semployee0s_Struct_Tuple -> _char_Vec -%LCLop __ \select name :_semployee0s_Struct -> __char_Obj_Arr %LCLop __ \select ssNum :_semployee0s_Struct_Tuple -> int %LCLop __ \select ssNum :_semployee0s_Struct -> _int_Obj -%LCLop __ \field_arrow name :__semployee0s_Struct_Ptr -> __char_Obj_Arr +%LCLop __ \select name :_semployee0s_Struct_Tuple -> _char_Vec +%LCLop __ \select name :_semployee0s_Struct -> __char_Obj_Arr %LCLop __ \field_arrow ssNum :__semployee0s_Struct_Ptr -> _int_Obj +%LCLop __ \select salary :_semployee0s_Struct_Tuple -> int +%LCLop __ \select salary :_semployee0s_Struct -> _int_Obj +%LCLop __ \field_arrow name :__semployee0s_Struct_Ptr -> __char_Obj_Arr +%LCLop __ \select gen :_semployee0s_Struct_Tuple -> _eemployee0e_Enum +%LCLop __ \select gen :_semployee0s_Struct -> __eemployee0e_Enum_Obj +%LCLop __ \field_arrow salary :__semployee0s_Struct_Ptr -> _int_Obj +%LCLop __ \select j :_semployee0s_Struct_Tuple -> _eemployee1e_Enum +%LCLop __ \select j :_semployee0s_Struct -> __eemployee1e_Enum_Obj +%LCLop __ \field_arrow gen :__semployee0s_Struct_Ptr -> __eemployee0e_Enum_Obj +%LCLop __ \field_arrow j :__semployee0s_Struct_Ptr -> __eemployee1e_Enum_Obj %LCLop NIL : -> __char_Obj_Ptr %LCLop NIL : -> __semployee0s_Struct_Ptr %LCLop - __ :int -> int @@ -168,6 +171,8 @@ %LCLop sizeof :double -> int %LCLop sizeof :_eemployee0e_Enum -> int %LCLop sizeof :_eemployee1e_Enum -> int +%LCLop sizeof :eref -> int +%LCLop sizeof :map -> int %LCLop sizeof :empset -> int %LCLop isSub :_char_Vec, int -> bool %LCLop isSub :__char_Obj_Arr, int -> bool diff --git a/test/funcpointer.out b/test/funcpointer.out index 2b88b1d..33be783 100644 --- a/test/funcpointer.out +++ b/test/funcpointer.out @@ -28,8 +28,5 @@ funcpointer.c:48:10: Function (t6) called with 0 args, expects 2 funcpointer.c:49:10: Function (t6) called with 1 args, expects 2 funcpointer.c:50:11: Function (t6) called with 1 args, expects 2 funcpointer.c:50:10: Function ((t6)(3)) called with 0 args, expects 1 -uentry.c:579 [funcpointer.c:54:2]: >> called uentry_getFcnPreconditions on nonfunction f2 t2 -uentry.c:583 [funcpointer.c:54:2]: >> called uentry_getFcnPreconditions on nonfunction f2 t2 -uentry.c:633 [funcpointer.c:54:2]: >> called uentry_getFcnPostconditions on nonfunction f2 t2 Finished LCLint checking --- 18 code errors found, as expected diff --git a/test/help.out b/test/help.out index a385182..b40443c 100644 --- a/test/help.out +++ b/test/help.out @@ -217,6 +217,7 @@ Finished LCLint checking --- no code processed impcheckmodspecglobs impcheckmodstatics impconj + implictconstraint impouts imptype includenest @@ -900,6 +901,7 @@ arraywrite --- possible buffer overflow from an out of bounds write fcnpost --- Function has the post condition fcnconstraint --- unresolved constraint constraintlocation --- display full c expression for every constraint generated +implictconstraint --- Try to generate implicit constraints for functions nullterminated --- misuse of nullterminated allocation nullderef --- possible dereferencce of null pointer fcnderef --- dereferencce of a function type diff --git a/test/null6.lcd b/test/null6.lcd index 773abd2..896b9ac 100644 --- a/test/null6.lcd +++ b/test/null6.lcd @@ -769,8 +769,8 @@ 276$@0@s3@1@s3,tp1$@0#putc 364$@1@@1@s0$@0#abs 203@6@0@5@0@0$$@0#raise -280$@1@g125@0@0,s3@1@s3,tg125$@0#puts 213$@0@s3,g113@0@0@1@s3,g113$@0#remove +280$@1@g125@0@0,s3@1@s3,tg125$@0#puts 309$@1@@1@s0$@0#atoi 349$@0@s3@1@s3$@0#system 483$@1@@1@s0$@0#wctob @@ -782,8 +782,8 @@ 344$@0@s1@1@s1$@0#atexit 405$@1@@1@s0$@0#mbsinit 278$@1@g125@0@0,s3@1@s3,tg125$@0#putchar -271$@1@g124@0@0,s3@1@s3,tg124$@0#getchar 321$@0@s1@1@s1$@0#rand +271$@1@g124@0@0,s3@1@s3,tg124$@0#getchar 317$@0@g113@0@0@1@tp1,g113$@0#strtol 477$@0@@1@tp1$@0#wcstol 371$@1@@1@s0$@0#labs diff --git a/test/simplebufferConstraintTests.expect b/test/simplebufferConstraintTests.expect index 0839646..6272fb8 100644 --- a/test/simplebufferConstraintTests.expect +++ b/test/simplebufferConstraintTests.expect @@ -17,11 +17,11 @@ test3.c:9:3: Unresolved constraint: test7.c:2:6: Function t defined more than once m.c:11:1: Previous definition of t test7.c: (in function t) -test7.c:6:3: Unresolved constraint: - Lclint is unable to resolve Requires: : MAXSET ((g @ test7.c:4:3 ) ) >= ( - 4 ) needed to satisfy Requires: : MAXSET ((g @ test7.c:6:3 ) ) >= ( 2 ) test7.c:8:3: Unresolved constraint: Lclint is unable to resolve Requires: : MAXSET ((j @ test7.c:8:3 ) ) >= ( 0 ) needed to satisfy Requires: : MAXSET ((j @ test7.c:8:3 ) ) >= ( 0 ) +test7.c:6:3: Unresolved constraint: + Lclint is unable to resolve Requires: : MAXSET ((g @ test7.c:4:3 ) ) >= ( + 4 ) needed to satisfy Requires: : MAXSET ((g @ test7.c:6:3 ) ) >= ( 2 ) Finished LCLint checking --- 7 code errors found diff --git a/test/tests2.5/newlint.lcd b/test/tests2.5/newlint.lcd index 6a37024..0e98542 100644 --- a/test/tests2.5/newlint.lcd +++ b/test/tests2.5/newlint.lcd @@ -701,8 +701,8 @@ 372@-@-@0@0@0@0@374#ldiv_t *1 (Constant) 0@i0@0@6#NULL -2$#NDEBUG 2@i1@0@0#TRUE +2$#NDEBUG 2@i0@0@6#FALSE 3$#UCHAR_MAX#UCHAR_MIN 4$#CHAR_MAX#CHAR_MIN#SCHAR_MAX#SCHAR_MIN -- 2.45.1