Bugs
This page documents reported bugs in LCLint 2.0 that are (believed to
be) fixed in LCLint 2.1a.
parsing array declarations with type casts
Bug: An array declaration like, x[(user type) N]
is not parsed correctly is some contexts.
Update: Coming in Version 2.1a
old-style main declaration
Bug: If main is declared using without parameter types,
a type error results.
Update: Coming in Version 2.1a
time functions
Bug: The standard libraries declare ctime,
gmtime and localtime with a parameter of type
time_t. It should be a pointer to time_t.
Update: Coming in Version 2.1a
perror
Bug: The standard libraries declare perror with no
/*@null@*/ annotation on its parameter. It should have a null
annotation.
Update: Coming in Version 2.1a
offsetof
Bug: offsetof is not supported by LCLint 2.0.
Update: Coming in Version 2.1a
negative literals
Bug: Numeric literals with - may not typecheck correctly (they
are typed too strictly).
short a = -2;
Update: Coming in Version 2.1a
enum names
Bug: Enumerator names may not be used inside the enum
declaration, e.g.:
enum enum_t { A, B = A } ;
Update: Coming in Version 2.1a
enum scoping
Bug: Enumerator names declared withing a structure scope are not
visible, e.g.:
struct struct_t
{
enum enum_t { A, B } type;
};
Update: Coming in Version 2.1a
function array types
Bug: A function pointer type like,
void (*f[10])(void);
is not interpreted correctly.
Update: Coming in Version 2.1a
macro names
Bug: A macro definition like,
# define NAME\
fails. (No space between the macro name and continuation character.)
Update: Coming in Version 2.1a
exit
Bug: Calling exit() produces a run-time bug report (when
the (non-existent) argument to exit is checked.
Update: Coming in Version 2.1a
clock
Bug: The clock library function is declared with
/*@globals internalState@*/, not /*@modifies
internalState@*/. This causes loops that depend on
clock() to be incorrectly reported as infinite.
Fix: Change declaration in standard,h,
strict.h, unix.h to /*@modifies
internalState@*/.
Update: Coming in Version 2.1a
static arrays
Bug: Local arrays declared with static are incorrectly marked as
stack-allocated storage.
Fix: Static arrays should not be stack-alloacted.
Update: Coming in Version 2.1a
sef and returned cannot be used together
Bug: A parameter cannot be annotated with both sef and
returned.
Update: Coming in Version 2.1a
header file inclusion
Bug: There is no way to control if ANSI header files are skipped
or included normally.
Fix: Flag skipansiheaders, change rules for skipping
include files not listed in systemdirs.
Update: Coming in Version 2.1a
array parameters
Bug: Function parameters of array type were incorrectly marked as
stack-allocated storage.
Fix: Array parameters should not be stack-alloacted.
Update: Coming in Version 2.1a
%X format code to printf
Bug: The type of %x is incorrect. Was int, should be
unsigned int.
Fix: Correct type in exprNode.c.
Update: Source and alpha packages, 21 March 1996.
Standard libraries
Change: Added annotations to declarations in standard library:
extern /*@observer@*/ /*@null@*/ char *setlocale (int category, /*@null@*/ char *locale)
extern int setjmp (/*@out@*/ jmp_buf env) /*@modifies env;@*/ ;
Change: Added to unix.h:
- A bunch of type definitions like uchar_t, ino_t,
etc.
- A declaraction for struct stat that includes only those
fields that are consistent on three Unix platforms (Digital Unix,
Ultrix, and Solaris).
- Declarations of stat, fstat and lstat.
Update: Source and common packages, 20 March 1996
Continuation markers in #if, #else, etc.
Bug: Because of the #line marker generated in lclint's
pre-preprocessing phase, multiple line preprocessor directives were not
handler correctly.
Fix: Don't produce the #line marker for directives that
include the continuation character.
Update: Source package, alpha, decmips, solaris, linux-elf, 20 March 1996
struct types in .lh files
Bug: The code generated for a forward struct in an .lh
is missing the field declarations.
Fix: Fix lh.c to generate code for exposed type nodes
with no declarators.
Update: Source package, alpha, decmips, solaris, linux-elf, 20 March 1996
fresh
Bug: The fresh operator in LCL is only defined for
mutable abstract types. Should probably also be defined for exposed
pointer types?
Cannot use unused in LCL
Bug: The unused annotation is not recognized in LCL
specifications.
Fix: Add unused to tokens in lclscanline.c and
llgrammar.y.
Update: Source package, 20 March 1996; alpha, decmips, solaris, linux-elf, 20 March 1996
SunOS4.1 Bug Fix
Bug: The code does not call fseek (..., SEEK_CUR) after
reading and writing to the stream before calling ftell.
Apparently, the call to fseek is necessary to ensure the
correct result from ftell. (So far, this problem is only
manifest on SunOS4 systems.)
Thanks: Thanks to Jutta Degener <[email protected]> for
providing this bug fix.
Update: Source package (change in macrocache.c), 11
March 1996; alpha, decmips, solaris, linux-elf, 20 March 1996
date
Change: Instead of generating the date that is printed in the
herald using the Unix date command, the date is read from the
DATE file in the package. This means the date is that date the
package was created, not when the code was compiled. This was mainly
done because the interface to the date command is not
standardized across UNIX platforms.
Update: Source package, 10 March 1996
test suite
Change: Removed help -flags full test since the results
may not match exactly if the machine has a different temporary
directory. Added -showcol flag to db tests since different
preprocessors may produce slightly different column numbers for some of
the messages.
Update: Source and common packages, 10 March 1996
ssize_t
Change: Added ssize_t to the standard libraries. It is
supported by POSIX, but not part of the ANSI Standard Library. Perhaps,
what is needed is a posix standard library.
Update: Source and common packages, 10 March 1996
notreached
Bug: A parse error is reported if /*@notreached@*/ is not
followed by a statement.
Example:
void f (void) { /*@notreached@*/ }
Fix: Fixed grammar.
Update: Source and alpha packages, 8 March 1996; decmips, solaris,
10 March 1996; linux-elf, 20 March 1996
Breaking do ... while loops
Bug: An error is reported for a break inside a do ... while loop.
Example:
do { break; } while (FALSE);
Fix: Fixed so that while clause is entered after the do.
Update:Source and alpha packages, 7 March 1996; decmips, solaris,
10 March 1996; linux-elf, 20 March 1996
ignoresigns Flag
Bug: The ignoresigns flag does not behave as documented
for literal values.
Example:
Running lclint +ignoresigns on,
unsigned int x = -2;
should not produce an error message.
Fix: Fixed alternate types of numerics in cscanner.l,
and type checking in cprim.c.
Update: Source and alpha packages, 7 March 1996; decmips, solaris,
10 March 1996; linux-elf, 20 March 1996
Internal Type Definitions
Bug: Type definitions inside function bodies produce and internal
assertion failure.
Example:
void f (void) { typedef int tint; }
Fix: Removed assertion for type and tag declarations in
usymtab_addEntryQuiet in usymtab.c.
Update:Source and alpha packages, 7 March 1996; decmips, solaris,
10 March 1996; linux-elf, 20 March 1996
Continuation markers in comments
Bug: Continuation markers inside comments are lost by the
pre-preprocessor.
Example:
/* this is a \
continued \
comment */ \
Fix: Changed pcpp.c to not remove \'s in
comments. Report errors if a \ in a comment is followed by
*/ or a \ not in a comment is followed by a non-space
character.
Update:Source and alpha packages, 7 March 1996; decmips, solaris,
10 March 1996; linux-elf, 20 March 1996
David
Evans
University of Virginia, Computer Science
[email protected]