I have tagged and tarballed Sparse 0.4, now available from
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
  * -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
* 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
  * 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
* 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

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 
          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 
          Remove extra space.
          Add shebang to gvpr scripts, make them executable, and change usage 
          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 
          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 
          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 
          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 
          validation/restricted-typeof.c: Make globals static to avoid 
extraneous warnings.
          validation/escapes.c: Make globals static to avoid extraneous 
          validation/non-pointer-null.c: Make global static to avoid extraneous 
          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 
          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 
          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 
          Fix GCC warnings in c2xml
          Fix sparse warnings in c2xml: mark globals static and remove unused 
          Fix test-suite to handle stdout and stderr separately, and fix up 
          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 
          Add test-suite metadata to old-initializer.c; also test with 
          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 
          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 
          Add some missing dependencies in the Makefile
          Drop -fpic; it hurts performance and we don't build libsparse.so by 
          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 
          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 
          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 
          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 
          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
          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

Reply via email to