v0.5.1 (2017-08-18)¶
It is finally there. Sparse 0.5.1 is released.
I consider this the best quality of release of sparse I ever experienced so far. There are lots of enhancement and bug fixes incorporate into this release.
I would like to thank every one that contributes to this release, people who submit patches, perform testing and send bug reports.
I want to specially thank Luc Van Oostenryck who makes this release possible. He has 242 commits in this release, far more than any one else.
The development effort for the next release has already began.
Finally, I would like to call for developers joining the sparse project. If you are interested in modern compilers, reading compiler books and want some excise. Sparse is a good project to start.
Sparse is very small, the project compiles under 10 seconds. It can digest the full kernel source file, generate internal byte code representation and perform check on it. All this happens in 1/10 of the time it took gcc to compile the same source file.
Here is some project ideas, https://git.kernel.org/pub/scm/devel/sparse/sparse.git/tree/Documentation/project-ideas.md?h=v0.5.1
Thanks
Chris
- Aaro Koskinen (1):
build: allow use of PKG_CONFIG to override pkg-config
- Andy Shevchenko (1):
lib.c: skip –param parameters
- Ard Biesheuvel (2):
sparse: treat function pointers as pointers to const data
Ignore pure attribute in assignement
- Azat Khuzhin (2):
sparse, llvm: compile: skip function prototypes to avoid SIGSEGV
validation/prototype: regression for skipping prototypes
- Christian Borntraeger (1):
s390x: add the proper defines for data types
- Christopher Li (24):
Minor clean up for option handling
round up the array element size to byte align
Make same_symbol list share the same scope
rename -Werror to -Wsparse-error
teach next_designators() use array_element_offset()
Ptr list sorting should use memmove instead of memcpy
Make macro expanded string immutable
Fix warning compiling sparse-llvm
Adding ignored attribute optimize
Let create_symbol check for previous same symbol
Add full list of gcc attribute
bump sparse’s version to 0.5.1-rc4
Adding gcc attribute no_gccisr
Add test case for the wine dead loop bug
Makefile: clean up and simplify
Makefile: add selfcheck target
Adding _Pragma()
fix warnings report by selfcheck
Adding gcc attribute noipa etc
Adding document for sparse patch submit process
Documents: project ideas
test-inspect: handle special case iter==NULL
test-inspect: Detect gtk3 then gtk2 package
Sparse 0.5.1
- Cody P Schafer (3):
build: allow use of LLVM_CONFIG to override llvm-config config script
sparse{i,c}: use LLVM_CONFIG to find llc and lli
parse: support c99 [static …] in abstract array declarators
- Dan Carpenter (1):
ptrlist: reading deleted items in NEXT_PTR_LIST()
- Daniel Wagner (1):
parse: Add comment to struct statement
- Edward Cree (1):
Allow casting to a restricted type if !restricted_value
- Emilio G. Cota (1):
Define __CHAR_BIT__
- Emily Maier (2):
linearize: Emit C99 declarations correctly
validation: Check C99 for loop variables
- Hans Verkuil (3):
Add test case for extern array
Add test case for anonymous union initializer
Add test case for the ioc type check
- Heiko Carstens (1):
sparse/parse.c: ignore hotpatch attribute
- Jeff Layton (2):
sparse: make bits_to_bytes round up instead of down
Handle SForced in storage_modifiers
- Joe Perches (1):
sparse: Allow override of sizeof(bool) warning
- Johannes Berg (1):
implement constant-folding in __builtin_bswap*()
- John Keeping (3):
validation/sizeof-bool: fix broken test case
evaluate: split out implementation of compatible_assignment_types
Support GCC’s transparent unions
- Lance Richardson (3):
sparse: ignore __assume_aligned__ attribute
sparse: update __builtin_object_size() prototype
sparse: add support for _Static_assert
- Linus Torvalds (5):
Add warning about duplicate initializers
Use any previous initializer to size a symbol
Fix error at anoymous unions
Fix scoping of extern symbols in block scope
Fix initializers in anonymous structs and unions
- Luc Van Oostenryck (242):
Teach sparse about the __COUNTER__ predefined macro
Fix size calculation of unsized bool array
Do not drop ‘nocast’ modifier when taking the address.
fix mixup in “Handle SForced in storage_modifiers”
Fix type checking of variadic functions
add missing #include “char.h” to char.c
make ‘ignored_attributes[]’ static
cleanup: remove evaluate_arguments()’s unused argument
Warn on unknown attributes instead of throwing errors
Remove unneeded variable in integer_promotion()
fix discarded label statement
add test case for builtin bswap with constant args
make ptrlist walking against robust against empty blocks
let “compile” not crash on bools
give comparable label’s names to basic blocks
OP_SWITCH should use ‘insn->cond’ instead of ‘insn->target’
remove unused field ‘multijump’ in struct instruction
storage should not be inherited by pointers
testsuite: simplify test function-pointer-inheritance
use a shorter name for function-pointer-modifier-inheritance.c
testsuite: test modifiers preserved by ‘&’ operator
testsuite: test modifiers preserved by ‘typeof()’
some modifiers need to be preserved by ‘typeof()’
Update maintainers in the manpage
cgcc should not define non-reserved identifiers
recursive phi_defines cannot happen
fix missing element in types declaration
add support for __int128
fix typing error in compound assignment
llvm: fix typing when comparing to a constant
llvm: remove unneeded OP_COPY support
fix cast to bool
unssa: do not try to update liveness
unssa: simplify rewrite of OP_PHISOURCE
unssa: try to avoid some OP_PHI copies
unssa: eliminate trivial phisrc copies
unssa: update comment about the unneeded copies
volatile loads must not be simplified
fix superfluous phisrc
fix phisrc mixup
missing load simplification
fix value of label statement
C11: teach sparse about ‘_Thread_local’
C11: teach sparse about ‘_Noreturn’
C11: teach sparse about ‘_Alignof()’
C11: teach sparse about ‘_Alignas()’
C11: teach sparse about ‘–std={c11,gnu11}’
fix cast’s target type info
fix crash while testing between conditional & unconditional OP_BR
kill uses of replaced instructions
fix killing OP_PHI instructions
fix killing OP_CAST & friends
fix killing OP_SELECT
fix killing OP_COMPUTEDGOTO
explicitely ignore killing OP_ENTRY
cleanup kill_instruction()
fix conditional context test case with void
add helper: is_scalar_type()
validate expression’s type in conditionals
remove unused arg in uses/defs functions
add testcase for wrong early escape conversion
warn on unknown escapes after preprocessing
remove ‘Escape’ from token character class
fix killing OP_SETVAL instructions
define __LP64__ & _LP64 if arch_m64 is enabled
add an helper for common predefined macros
define __LONG_MAX__ & __SIZEOF_POINTER__
move OP_MUL simplification in a separate function
simplify ‘(x / 1)’ to ‘x’
simplify ‘(x * -1)’ to ‘-x’
simplify ‘(x / -1)’ to ‘-x’ (but only for signed division)
simplify ‘(x % 1)’ into ‘0’
simplify ‘~(~x)’ and ‘-(-x)’ to ‘x’
simplify ‘(x || 1)’ to ‘1’
simplify ‘(x op x)’ to ‘0’, ‘1’ or ‘x’
add warning option ‘-Wtautological-compare’
simplify comparisons followed by an equality test against 0 or 1
simplify ‘(x || x)’ and ‘(x && x)’
add support for LLP64 arch
move evaluation & expansion of builtins in a separate file
let identical symbols share their evaluate/expand methods
expand __builtin_bswap*() with constant args
testsuite: give a proper name to the ‘binary-constant’ test
testsuite: make tests known to fail effectively fail
testsuite: simplify the ioc-typecheck case
testsuite: add a simple test for -Wenum-mismatch
testsuite: add tag to ignore the output/error
testsuite: report as error tests known to fail but which succeed
allow to launch the test suite from the project root dir
testsuite: check patterns presence or absence in output
testsuite: add some selfchecking
testsuite: check the nbr of times a pattern should be present
testsuite: use ‘error’ instead of ‘info’ for successful tests known to fail
testsuite: get ‘check-known-to-fail’ earlier
testsuite: allow quieter error reporting
testsuite: quieter error reporting for ‘known-to-fail’
cleanup: there is no ‘struct phi’ to allocate
remove unused field ‘multijmp’ in struct statement
remove unused field ‘goto_bb’ in struct statement
fix show-parse()’s labels
add killing of OP_SLICEs
add killing of OP_PHISOURCEs
add helper kill_use_list()
fix killing of OP_PHIs
fix clear_phi(), replace it by kill_instruction()
remove unused clear_phi()
fix killing of otherwise not-handled instructions
kill_instruction() may need to be forced or not
add killing of pure calls
fix killing OP_CALL via pointers
add killing of non-volatile loads
add killing of stores
fix killing of rewritten loads
use kill_instruction() when killing an OP_PHI during CSE
use kill_instruction() when killing any instructions during CSE
fix OP_PHI usage in try_to_simplify_bb()
simplify float-to-float casts that doesn’t change size
CSE: add test cases for comparisons duality
CSE: use commutativity to identify equivalent instructions
CSE: avoid hashing removed instructions
fix expansion cost of pure functions
add missing braces around FOR_EACH_PTR loop
make -Wbitwise operational again
use option: ‘-Woverride-init’
add test case for warnings about overlapping initializers
allow to warn on all overlapping initializers
fix checking of overlapping initializer
ignore whole-range overlapping initializer
fix usage in simplify_seteq_setne()
fix size of loaded bitfields
split OP_BR between unconditional & conditional: OP_CBR
remove unused helper is_branch_goto()
replace test for c99 for-loop initializers
add test case for scope of C99 for-loop declarations
add test cases for storage of c99 for-loop declarations
add an optional validation method to external_declaration()
check the storage of C99 for-loop initializers
move ‘extern with initializer’ validation after the validate method
use VOID instead of directly using &void_pseudo
teach sparse about -Waddress
add is_func_type()
warn if testing the address of a function
add is_array_type()
warn if testing the address of an array
fix evaluation of a function or array symbol in conditionals
fix is_scalar_type()
fix test for cast to bool on 32bit machines
predefine __INT_MAX__ and friends
predefine __SIZEOF_INT__ & friends
fix test validation/div.c
fix cast to pointer to floating-point
do not depends on limits.h to test __CHAR_BIT__
fix expansion of integers to floats
avoid crash with test-linearize -vv
fix OP_PHI usage in try_to_simplify_bb(), correctly
be more careful with concat_user_list()
avoid useless warning for ‘bool <- restricted type’ conversion
introduce REPEAT_CFG_CLEANUP
let kill_unreachable_bbs() clear REPEAT_CFG_CLEANUP
fix: kill unreachable BBs after killing a child
ignore VOID when trying to if-convert phi-nodes
fix boolean context for OP_AND_BOOL & OP_OR_BOOL
fix missing reload
keyword: add test case for reserved ‘_Static_assert’
keyword: regroup the [reserved] keywords
keyword: explicitly add C99 & C11 keywords
keyword: add more reserved keywords to the test case
keyword: add a comment about NS_TYPEDEF & reserved keywords
keyword: no pre-declaration needed for attribute names
add get_<allocator>_stats()
add show_allocation_stats()
add helper handle_simple_switch()
teach sparse how to handle ‘-fmem-report’
use -fmem-report to report allocation stats
testsuite: cleanup result files
fix: kill old branch in insert_branch()
returns the correct type when evaluating NULL
remove bit_size & bit_offset from struct access_data
add test case for linearize_initializer() of bitfields
fix implicit zero initializer.
remove alignment from struct access_data
remove origval from struct access_data
add support for a new flag: -fdump-linearize[=only]
more tests for implicit ‘bool <- restricted’ casts
avoid warning on explicit ‘bool <- restricted’ casts
define ident_list
teach sparse how to dump macro definitions
fix hardcoded size of wide chars
avoid to redefine __INT_MAX__ and friends
fix definition of __SCHAR_MAX__ & friends
teach sparse how to handle -dD flag
let -dD report macro definitions
testsuite: get all tags in once
testsuite: grep the expected output only when needed
testsuite: grep the output patterns only when needed
testsuite: use shell arithmetic instead of fork-execing expr
testsuite: remove unneeded ‘./’ before commands
testsuite: avoid fork+execing basename
teach cgcc about OSX aka darwin
ret-void: add test case for toplevel asm
ret-void: warn for implicit type
use NULL instead of 0 in testcases.
finer control over error vs. warnings
Add more declarations for more builtin functions
keep the warnings table alphabetically sorted
cgcc: alphasort warning names in check_only_option()
cgcc: add missing warning names to check_only_option()
cgcc: filter-out ‘-fdump-linearize[=…]’
memcpy()’s byte count is unsigned
add support for -Wmemcpy-max-count
add support for -fmemcpy-max-count
fix: add missing examine in evaluate_dereference()
fix OP_PHI usage in try_to_simplify_bb() only when non-bogus
fix: try_to_simplify_bb eargerness
add fallback for missing __builtin_bswapXX()
fix: __builtin_bswap{16,32,64}() constantness
dissect: use built_in_ident() instead of MK_IDENT()
teach sparse about -m{big,little}-endian
teach sparse about __{BIG,LITTLE}_ENDIAN__
teach sparse about __BYTE_ORDER__ & __ORDER_{BIG,LITTLE}_ENDIAN__
cgcc: teach cgcc about arm64
cgcc: teach cgcc about ppc64[le]
cgcc: teach cgcc about arm
bump sparse’s version to -rc3
fix ptrlist corruption while killing unreachable BBs
fix infinite simplification loops
fix BB dependencies on phi-nodes
fix crash when ep->active is NULL
fix crash in rewrite_branch()
fix some crashes in add_dominators()
fix crash with sym->bb_target == NULL
take comma expr in account for constant value
fix: give a type to bad cond expr with known condition
ptrlist: add a counter for the number of removed elemnets
ptrlist: adjust ptr_list_size for the new ->rm field
ptrlist: add MARK_CURRENT_DELETED
ptrlist: avoid iteration on NULL entries
mark pseudo users as deleted instead of removing them
testsuite: add support for commands with timeout
Remove single-store shortcut
Bump sparse’s version to -rc5
Sparse v0.5.1
- Michael Stefaniuc (3):
Add the __builtin functions needed for INFINITY and nan().
Add a define for __builtin_ms_va_copy()
Add tests for the builtin INF and nan() functions.
- Oleg Nesterov (3):
dissect: teach do_expression() to handle EXPR_OFFSETOF
dissect: teach do_initializer() to handle the nested EXPR_IDENTIFIER’s
dissect: s/mode_t/usage_t/ in report_member()
- Omar Sandoval (1):
sparse-llvm: Fix LLVM 3.5 linker errors
- Pavel Roskin (1):
Use LLVM_CONFIG instead of llvm-config in Makefile
- Ramsay Jones (15):
Add the __restrict__ keyword
sparse: add ‘gnu_inline’ to the ignored attributes
don’t call isdigit/tolower with a char argument
Makefile: suppress error message from shell
don’t run sparse{c,i} tests when sparse-llvm is disabled
Add support for multiarch system header files
cgcc: use only the cc command to determine $gcc_base_dir
cgcc: use $ccom to set $multiarch_dir if not specified
test-suite: remove bashism to avoid test failures
cgcc: avoid passing a sparse-only option to cc
parse.c: remove duplicate ‘may_alias’ ignored_attributes
compile-i386.c: don’t ignore return value of write(2)
sparse: add ‘alloc_align’ to the ignored attributes
lib: workaround the ‘redeclared with different type’ errors
Makefile: pass -Wno-vla to sparse while checking pre-process.c
- Randy Dunlap (1):
documentation: update email reference link
- Rui Teng (1):
sparse: add no_sanitize_address as an ignored attribute
- Thomas Graf (1):
sparse: Make -Werror turn warnigns into errors
- Tony Camuso (2):
.gitignore: add cscope and Qt project files
Add default case to switches on enum variables