v0.6.2 (2020-06-21)

  • add a new tool: sindex - the semantic utility

    Sindex is a simple to use cscope-like tool but understanding how symbols are used and which can track struct members.

  • add support for GCC’s __auto_type

  • add support for _Generic

  • fully propagate declarations downward.

    For example, it means that code like:

    static int foo(void);
    int foo(void) { return 0; }
    

    now behaves as expected: foo() is effectively static.

  • multi-arch:
    • allow a single sparse executable to be used for multiple architectures
    • add support for -mcmodel & -f{pic,PIC,pie,PIE}, mainly for RISC-V
    • add new option, –arch=$ARCH, to specify the target architecture
    • move all arch-specific code into separate files (target-$ARCH.c)
    • try to support the various floating-point ABIs on ARM
    • fix wchar_t & wint_t for openbsd
    • add missing predefines for PPC
    • add missing predefines: __amd64 & __amd64__
    • sparc32 on SunOS/Solaris uses 128-bit long double
    • fix wchar_t & wint_t on SunOS/Solaris
    • teach sparse about -fshort-wchar
    • keep cygwin specifics with i386/x86-64 specifics
    • keep BSD & Darwin specifics with i386/x86-64 specifics
    • fix the signedness of plain chars
    • add support for s390 (ILP32)
    • add predefine for __mips__
    • predefine “i386” if needed
    • pre-define __unix__ and friends
    • add necessary defined for sunos-derived systems
    • improved detection of the native OS
  • warnings:
    • improve diagnostic message about wrong redeclaration
    • conditionally accept { 0 } without warnings
    • add -Wexternal-function-has-definition
    • display the bitfield name in error messages
    • oversized bitfields are now errors
    • add an option to suppress warning ‘no newline at EOF’
    • warn when jumping into statement expressions
    • warn when using undefined labels
    • warn on defined but unused labels
  • attributes:
    • allows ‘__<attribute-name>__’ for all attributes.
    • improve handling of function attributes
    • separate modifiers into type/declaration
    • add support for attributes ‘unused’ & ‘gnu_inline’
    • simplify parsing of inline/__tls/__visible
    • better handle function-only attributes
    • teach sparse about gnu_inline
    • parse enum attributes and, for now, ignore them
  • cgcc:
    • use -fshort-char for Cygwin
    • add support for riscv32 & riscv64
    • don’t define __CYGWIN32__ on 64-bit
    • filter-out sparse-specific -msize-long & -msize-llp64
    • use -mfloat-abi=hard for armhf
    • define _BIG_ENDIAN when needed
    • remove definition of _STRING_ARCH_unaligned (defined by glibc)
    • removed unneeded predefines for integers (now defined by sparse)
    • better multi-arch support by using –arch=$ARCH
  • testsuite:
    • avoid standard includes in the tests
    • fix testcase with non-constant initializer
  • IR
    • add support for the linearization of builtins
    • generate OP_UNREACH from __builtin_unreachable()
    • add OP_UNREACH after calls to __noreturn functions
  • doc:
    • do not use obsolete sphinx’s AutodocReporter
    • Sphinx’s minimal version is now 1.7
    • add basic doc about the type system
    • doc is now accessible as: https://sparse.docs.kernel.org
    • release notes (old and current ones) have been added to the doc
    • now using the sphinx_rtd_theme instead of the classic theme
  • misc:
    • add support for ‘-std=c17/c18’
    • simplify testing of which version of the standard is used
    • ensure that typeofs are evaluated before using show_typename()
    • use a single way to expand typeofs
    • various improvements to the ‘dissect’ tool
    • simplify the parsing of type specifiers
    • improve diagnostic messages concerning bitfields
    • fix premature examination of dereferenced object
    • various fixes for the expansion of constant symbols
    • fix type compatibility of _Atomic types
    • add support for builtin macros with argument
    • add support for __has_feature() & __has_extension()