Sparse 0.4 released

From: Josh Triplett
Date: Sat Sep 15 2007 - 18:01:41 EST


I have tagged and tarballed Sparse 0.4, now available from
<http://kernel.org/pub/software/devel/sparse/dist/sparse-0.4.tar.gz>,
with sha1sum `a77a10174c8cdb5314eb5000c1e4f24458848b91`.

Highlights and visible changes in this release:

* The Sparse validation files have become an automated test suite,
invoked via `make check`. Thanks to Damien Lespiau for the initial
`test-suite` script. Also thanks to Pavel Roskin for ideas,
discussion, and prototyping, and to the contributors of new test
cases and test-suite metadata for existing test cases.
* New backend `c2xml` by Rob Taylor, which outputs an XML
representation of the variable declarations, function declarations,
and data structures in a C file.
* `sparse` and `cgcc` now have manpages.
* Warning changes:
* Warn on `return <void expression>;` if given `-Wreturn-void`; off
by default because the C99 standard permits this.
* Sparse now defaults to -Wno-do-while.
* Sparse now defaults to -Wdecl.
* -Wno-old-initializer turns off warnings about non-C99 struct
initializers
* -Wno-non-pointer-null turns off warnings about using a plain
integer as a NULL pointer
* Initializer entries defined twice and bitfields without explicit
signs have changed from errors to warnings.
* `cgcc` no longer passes `-Wall` to `sparse` if given `-Wall` on the
command line. `-Wall` turns on all Sparse warnings, including
experimental and noisy ones. Don't include it just because a
project wants to pass `-Wall` to `cc`. If you really want `cgcc` to
run `sparse` with `-Wall`, set `CHECK='sparse -Wall'`
* Support for more builtin functions: `__builtin_labs`,
`__builtin_offsetof`, `__builtin_strcat`, `__builtin_strncat`, and
`__builtin_strlen`.
* Support for more attributes: `constructor`, `destructor`,
`__always_inline__`, `__noinline__`, `used`, `__syscall_linkage__`,
`format_arg`, `cdecl`, `stdcall`, `fastcall`, `dllimport`, and `dllexport`.
* Support for the `__DATE__` and `__TIME__` preprocessor symbols.
* Support for `__alignof` (treated like the existing `__alignof__`).
* typeof(bitwise_type) now produces the same type, not an incompatible
type; thanks to Al Viro.
* Various profile-driven optimizations and changes to compiler
optimization flags, making Sparse significantly faster.
* Numerous fixes to C standards compliance, thanks to Al Viro. In
particular:
* Sparse now requires integer constant expressions in various
places, not arbitrary expressions.
* Sparse now handles NULL pointer constants more correctly.
* Sparse now resolves pointer types more correctly in conditional
expressions
* The `graph` backend now outputs significantly better program graphs,
and the Sparse source code includes some `gvpr` scripts to modify
these graphs in various ways, such as only showing the callers or
callees of particular functions. Thanks to Dan Sheridan.
* Linux-style `make` output; for a more verbose make with full command
lines, `make V=1`. Thanks to Damien Lespiau.
* Numerous bugfixes and internal cleanups; thanks to the many Sparse
contributors.

Full changelog:

Al Viro (51):
handle __alignof as equivalent of __alignof__
saner reporting of overlaps in initializers
check for whitespace before object-like macro body
fix alignment for _Bool
fix interaction of typeof with bitwise types
better recovery from bad operations on bitwise
make copying of EXPR_INDEX non-lazy
tie the fields of struct in simple list
rewrite of initializer handling
fix handling of typeof on structs
missing NULL checks in initializer handling
take cast_to() out of usual_conversions(), do it in callers
mechanically split compatible_assignment_types()
null pointer constants have no special meaning for pointer subtraction
remove long-dead variable in evaluate_ptr_add()
remove useless argument in evaluate_ptr_sub()
cleanup of evaluate_assign_op()
clean up the typechecking in arithmetics
clean up usual_conversions(), kill evaluate_shift()
fix index conversions in evaluate_ptr_add()
fix default argument promotion
move degenerate() down into compatible_assignment_types()
in case of compound literal we want to delay examining type
warn on return <void expression>;
deal with enum members without excessive PITA
implement __builtin_offsetof()
fix handling of integer constant expressions
fix the comma handling in integer constant expressions
first pass at null pointer constants
make size_t better approximate the reality
fix handling of address_space in casts and assignments
fix handling of pointers in ?:
saner show_type()
clean up evaluate_sign()
integer_promotions() can't get SYM_NODE or SYM_ENUM
start cleaning type_difference()
get compatible_assignment_types() deal with all cases
fix the sanity check in evaluate_ptr_sub()
rewrite type_difference()
deal correctly with qualifiers on arrays
add __builtin_strlen()
no such thing as array of functions
new helper: unfoul()
handling of typeof in evaluate_member_dereference()
file and global scopes are the same for purposes of struct redefining
...,array should degenerate
sanitize evaluate_ptr_add(), start checking for pointers to functions
fix evaluate_compare()
sanitize evaluate_postop()
saner -Wtypesign
braino in conditional_expression()

Alberto Bertogli (1):
Implement x86-64 support in cgcc.

Alexey Dobriyan (2):
Fix infinite loop in free_preprocessor_line()
Fix -E handling

Christopher Li (2):
combinations string clean up
Pass a bitmask of keywords to handle_attributes

Damien Lespiau (6):
Change sparse homepage in ctags headers.
__DATE__ & __TIME expansion
Beautify all & install Makefile targets
test-suite: a tiny test automation script
test-suite documentation
Sample test-suite test cases

Dan Sheridan (2):
Improved graph generation using subgraph clusters for functions
Add gvpr-based post-processing for graphs

Josh Triplett (118):
Fix website and repository references in FAQ
Fix the version number
Remove old version note.
gitweb lives at git.kernel.org now.
Add a "make dist" that requires $(VERSION) to match `git describe`
Add test case for __asm__ __volatile__(...)
Make cgcc not pass -Wall to sparse even if passing it to cc
Teach cgcc about all currently existing sparse warning options
Teach cgcc about -ventry and -vdead
Parse asm after a label as a statement, not an attribute
Add test case for stdcall and cdecl attributes.
Add -Wno-old-initializer to turn off warnings about non-C99 struct initializers
Add test case for -Wno-old-initializer
Revert unintentional inclusion of warning fix in previous commit.
Use %td when printing a ptrdiff_t to avoid problems on 64-bit platforms
Remove extra space.
Add shebang to gvpr scripts, make them executable, and change usage accordingly
Fix an __attribute__() parsing error
Expand calling convention test case to cover fastcall
Add -Wno-non-pointer-null to turn off warning about using a plain integer as a NULL pointer
Add __builtin_strcat and __builtin_strncat.
Ignore the GCC constructor and destructor attributes
Remove inaccurate comment designating some attributes as windows-specific.
Move the ident for defined() into the preprocessor section.
Reorganize attribute list for readability.
Add double-underscore variant __always_inline__.
Add double-underscore variant __noinline__.
Add no-double-underscore variant "used", ignored like "__used__".
Add double-underscore variant __syscall_linkage__.
Add no-double-underscore variant format_arg.
Add explanatory comment about direct use of __IDENT for preprocessor idents.
Sparse always defines __STDC__ 1, so cgcc does not need to do so
Fix old typo: s/wierd/weird/
Canonicalize URL in FAQ: add www., add trailing slash
Change "LD" to "LINK" in Makefile prettyprinting.
Makefile prettyprinting: make INSTALL and other output line up correctly
Add test case for infinite loop in free_preprocessor_line()
Turn on -Wdecl by default.
ctags: Use const as appropriate in cmp_sym()
validation/old-initializer.c: Make the_s static to avoid extraneous warning.
validation/restricted-typeof.c: Make globals static to avoid extraneous warnings.
validation/escapes.c: Make globals static to avoid extraneous warnings.
validation/non-pointer-null.c: Make global static to avoid extraneous warning.
Merge commit 'viro/integer-constant'
Move all the preprocessor tests into validation/preprocessor/
Move test-suite output files to validation/.gitignore
.gitignore: Stop ignoring all dotfiles
validation: Update comments for current Sparse behavior and test-suite.
Add test-suite comments to all the obvious preprocessor tests
Make preprocessor-loop a normal numbered preprocessor test
Add test-suite comment to preprocessor21.
Add test-suite comment to address_space.c
Make clean depend on clean-check
Rename asm-volatile to better describe what it tests
Add test-suite comment to label-asm.c
Remove "check-exit-value: 0" and rely on default; remove extra blank line.
Add test-suite comment to bad-array-designated-initializer.c
Add c2xml to .gitignore
Split c2xml build rule into compile and link stages, and add the quiet prefixes
expression.h needs lib.h for struct position and symbol.h for int_ctype
Fix GCC warnings in c2xml
Fix sparse warnings in c2xml: mark globals static and remove unused globals
Fix test-suite to handle stdout and stderr separately, and fix up tests
Add test-suite metadata to bad-cast.c
Add test-suite metadata to bad-ternary-cond.c, and remove now-redundant comment
Add test-suite metadata to initializer-entry-defined-twice.c
Add test-suite metadata to context.c
Add test-suite metadata to escapes.c
Add test-suite metadata to calling-convention-attributes.c
Fix typos in test-suite documentation
Makefile: stop cleaning files we didn't make and have no business cleaning
Add test-suite metadata to old-initializer.c; also test with -Wno-initializer
allocate.h: Stop needlessly returning a void value in __DO_ALLOCATOR
Turn off -Wdo-while by default.
Add test-suite metadata to label-attr.c
validation/builtin_safe1.c: Show the unsafe macro argument
Make "Initializer entry defined twice" a warning, not an error
Remove explicit restatements of defaults in metadata for member_of_typeof test
Remove explicit restatements of defaults in metadata for outer-scope test
Remove explicit restatements of defaults in metadata for comma test
Add test case for comparing null pointer constant to int.
Makefile: Use -O2 -finline-functions, not just -O
cse: Size insn_hash_table more realistically, speeding up CSE significantly
Add some missing dependencies in the Makefile
Drop -fpic; it hurts performance and we don't build libsparse.so by default
Add another test case to validation/comma.c
ctags: Handle some new namespaces and symbol types.
is_zero_constant: declare saved const
Add test case for -Wtypesign
Sort warning options in lib.c and lib.h
Rename Wcast_to_address_space to Wcast_to_as to match the command-line argument
Add a manpage for sparse
Install the Sparse manpage
cgcc: Sparse accepts -Wcast-to-as, not -Wcast-to-address-space
Rename Wundefined_preprocessor to Wundef to match the command-line argument
cgcc: Sparse accepts -Wundef, not -Wundefined-preprocessor
Use -fno-strict-aliasing, as the ptrlist code seems to violate C99 strict aliasing rules
Add test-suite annotations to restricted-typeof.c
Add test-suite annotations to double-semicolon.c
Add test-suite annotations to check_byte_count-ice.c
Add test-suite annotations to badtype4.c
Add test-suite annotations to varargs1.c
Add test-suite annotations to struct-attribute-placement.c
Add test-suite annotations to non-pointer-null.c
Add test-suite annotations to struct-ns1.c
Add test-suite annotations to noderef.c
Makefile: Use ?= to allow overriding OS or AR on the Make command line
FAQ: Point to URL on vger for subscription instructions and archives
README: recode from ISO-8859-1 to UTF-8
validation: Rename typeconvert.c to integer-promotions.c to match its purpose
Add test-suite annotations to integer-promotions.c
Add test-suite annotations to cond_expr.c
Add test-suite annotations to function-pointer-modifier-inheritance.c
validation: Update comment in type1.c to reflect current state of Sparse
Add test-suite annotations to init-char-array.c
Add a manpage for cgcc
Add SEE ALSO for cgcc in sparse manpage
Makefile: VERSION=0.4

Kovarththanan Rajaratnam (1):
libxml compile fix on Cygwin

Michael Stefaniuc (3):
Ignore the cdecl and stdcall attributes for now.
Add test for typedef on pointer to function with stdcall attribute.
'\?' is a valid escape character defined by ANSI C. Its value is '?'.

Mike Frysinger (1):
Makefile: improve flag handling

Pavel Roskin (5):
Improve error message if using a member of an incomplete struct or union
Bitfield without explicit sign should be a warning, not an error
cgcc: preserve sparse exit code if -no-compile is used
Avoid use of libc headers in the validation suite
Fix warnings about undeclared globals, they are irrelevant to the test

Ramsay Jones (2):
Add (more) support for WIN32 attribute names
Add cygwin support to cgcc

Randy Dunlap (1):
add __builtin_labs()

Rob Taylor (4):
add end position to symbols
add sparse_keep_tokens api to lib.h
new get_type_name function
add c2xml program

Yura Pakhuchiy (1):
Make cgcc filter out all sparse warning related options

ricknu-0@xxxxxxxxxxxxxx (4):
tokenize.c: Replace handwritten strncmp with existing function.
expression.c: Clean up match_oplist() and add missing va_end()
parse.c: Adding va_end().
tokenize.c: Simplify drop_stream_eoln().

-- Josh Triplett

Attachment: signature.asc
Description: OpenPGP digital signature