Sparse 0.4 released

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


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 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 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
    [email protected] (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

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux