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: 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 <jutta@cs.tu-berlin.de> 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

LCLint Home Page David Evans
University of Virginia, Computer Science
evans@cs.virginia.edu