Sparse v0.6.0 is now out. The source code can be found at its usual repository: git://git.kernel.org/pub/scm/devel/sparse/sparse.git v0.6.0 The tarballs are found at: https://www.kernel.org/pub/software/devel/sparse/dist/ Many thanks to people who have contributed to the 888 non-merge patches of this release: Ramsay Jones, Randy Dunlap, Uwe Kleine-König, Joey Pabalinas, John Levon, Ben Dooks, Jann Horn, Logan Gunthorpe, Vincenzo Frascino and Tycho Andersen. Special thanks to Ramsay Jones who has reviewed numerous of my patches, tested many of my series and found many of my typos. Best wishes for 2019 -- Luc Van Oostenryck The changes since the pre-release (v0.6.0-rc1) are: * add -Wbitwise-pointer to warn on casts to/from bitwise pointers * beautify how types are displayed: * no more <noident> * no more redundant type specifiers * remove double space * some cleanup of the build system: * only need includedir from llvm-config * check if sparse-llvm needs libc++ * remove -finline-functions from CFLAGS * some random cleanup: * remove unneeded declarations in "compat.h" * remove unused arg in add_branch() * allocate BBs after the guards * remove redundant check of _Bool bitsize * remove unused regno() * remove self-assignment of base_type * some documentation: * update comment for struct-expression::cast_expression * fix list formatting in inline doc * document that identifiers are now OK for address spaces * add TODO list. The main changes since the previous release (v0.5.2) are: * by default, disable warnings about unknown attributes * no more warnings about sizeof(void) unless -Wpointer-arith is given * add support for __has_attribute() & __has_builtin() * many fixes for type evaluation/checking * the build should be more friendly for distros * a huge number of testcases have been added to the testsuite * the handling of cast instructions has been completely revamped * the SSA conversion has been is now corrected and has been rewritten with a variant of the classical algorithm * documentation is now handled with Sphinx and inline doc is extracted from the code. * online documentation can be found at https://sparse-doc.readthedocs.io/en/master/ A more complete list of changes is: * add predefined macros for __INTMAX_TYPE__, __INT_MAX__, ... * prepare to identify & display the address spaces by name * fix linearization of non-constant switch-cases * manpage: update maintainer info * manpage: add AUTHORS section * fixes for -dD * add support for -dM * remove more complex phi-nodes * fix linearization/SSA when missing a return * fix linearization/SSA of (nested) logical expressions * fix linearization of unreachable switch + label * add support for __has_attribute() * consolidate instruction's properties into an opcode table * fix: do not optimize away accesses to volatile bitfields * support mode(__pointer__) and mode(__byte__) * do 'classical' SSA conversion (via the iterated dominance frontier). * fix buggy recursion in kill_dead_stores() * kill dead stores again after memops simplification is done. * simplify TRUNC((x & M') | y, N) * simplify AND(SHIFT(a | b, S), M) * simplify TRUNC(SHIFT(a | b, S), N) * add simplification of TRUNC(TRUNC((x)) * add simplification of SHL(LSR(x), S), S) * generate integer-wide OP_ADD & OP_SUB in linearize_inc_dec() * simplify mask instructions & bitfield accesses * fix a few bugs related to the linearization of logical expressions * simplify those logical expressions. * add optimized version of some list operations * some simplifications of OP_SETNE & OP_SETEQ with 0 and 1 * several simplifications involving casts and/or bitfields * give a correct & sensible warning on negative or over-sized shifts. * add conservative simplification of such shifts. * do not optimize the meaningless shift: * any shift with a negative count * OP_ASRs with an over-sized shift count. * try to give a correct negative/too-big error message during simplification. * simplify chains of shifts. * simplify ZEXT + ASR into ZEXT + LSR * cse: try the next pair instead of keeping the first instruction * cse: compare casts only by kind a size, not by C type. * optimize away OP_UTPTR & OP_PTRTU which are nops. * cleanup of list walking macros: * make untagged pointers the normal case * use structurally equivalent struct for all pointer lists to avoid needless casting to and fro struct ptrlist * simplify PREPARE/NEXT/RESET logic by using common PTR_NEXT() * add validation of the IR. * improve expansion of builtin dynamic macros (__FILE__, ...) * add support for __INCLUDE_LEVEL__ & __BASE_FILE__ * mprove generation of predefined macros * add support for builtins doing overflow checking. * add support for the __has_builtin() macro. * improve Sphinx doc for IR instructions * have those instructions in the index * have a nicer presentation of the generated doc thanks to not having to use level-4 headings anymore * fixes & improvements to the testsuite; mainly: - allow to run the testsuite on all the tests of a subdir - teach 'format' to directly append to the testcase - validate the 'check-...' tags -- Luc Van Oostenryck