1v0.5.1 (2017-08-18) 2=================== 3 4It is finally there. Sparse 0.5.1 is released. 5 6I consider this the best quality of release of sparse I ever 7experienced so far. There are lots of enhancement and bug fixes 8incorporate into this release. 9 10I would like to thank every one that contributes to this release, 11people who submit patches, perform testing and send bug 12reports. 13 14I want to specially thank Luc Van Oostenryck who makes this 15release possible. He has 242 commits in this release, far more 16than any one else. 17 18The development effort for the next release has already began. 19 20Finally, I would like to call for developers joining the sparse project. 21If you are interested in modern compilers, reading compiler books 22and want some excise. Sparse is a good project to start. 23 24Sparse is very small, the project compiles under 10 seconds. 25It can digest the full kernel source file, generate internal byte 26code representation and perform check on it. All this happens in 271/10 of the time it took gcc to compile the same source file. 28 29Here is some project ideas, 30https://git.kernel.org/pub/scm/devel/sparse/sparse.git/tree/Documentation/project-ideas.md?h=v0.5.1 31 32Thanks 33 34Chris 35 36Aaro Koskinen (1): 37 * build: allow use of PKG_CONFIG to override pkg-config 38 39Andy Shevchenko (1): 40 * lib.c: skip --param parameters 41 42Ard Biesheuvel (2): 43 * sparse: treat function pointers as pointers to const data 44 * Ignore pure attribute in assignement 45 46Azat Khuzhin (2): 47 * sparse, llvm: compile: skip function prototypes to avoid SIGSEGV 48 * validation/prototype: regression for skipping prototypes 49 50Christian Borntraeger (1): 51 * s390x: add the proper defines for data types 52 53Christopher Li (24): 54 * Minor clean up for option handling 55 * round up the array element size to byte align 56 * Make same_symbol list share the same scope 57 * rename -Werror to -Wsparse-error 58 * teach next_designators() use array_element_offset() 59 * Ptr list sorting should use memmove instead of memcpy 60 * Make macro expanded string immutable 61 * Fix warning compiling sparse-llvm 62 * Adding ignored attribute optimize 63 * Let create_symbol check for previous same symbol 64 * Add full list of gcc attribute 65 * bump sparse's version to 0.5.1-rc4 66 * Adding gcc attribute no_gccisr 67 * Add test case for the wine dead loop bug 68 * Makefile: clean up and simplify 69 * Makefile: add selfcheck target 70 * Adding _Pragma() 71 * fix warnings report by selfcheck 72 * Adding gcc attribute noipa etc 73 * Adding document for sparse patch submit process 74 * Documents: project ideas 75 * test-inspect: handle special case iter==NULL 76 * test-inspect: Detect gtk3 then gtk2 package 77 * Sparse 0.5.1 78 79Cody P Schafer (3): 80 * build: allow use of LLVM_CONFIG to override llvm-config config script 81 * sparse{i,c}: use LLVM_CONFIG to find llc and lli 82 * parse: support c99 [static ...] in abstract array declarators 83 84Dan Carpenter (1): 85 * ptrlist: reading deleted items in NEXT_PTR_LIST() 86 87Daniel Wagner (1): 88 * parse: Add comment to struct statement 89 90Edward Cree (1): 91 * Allow casting to a restricted type if !restricted_value 92 93Emilio G. Cota (1): 94 * Define __CHAR_BIT__ 95Emily Maier (2): 96 * linearize: Emit C99 declarations correctly 97 * validation: Check C99 for loop variables 98 99Hans Verkuil (3): 100 * Add test case for extern array 101 * Add test case for anonymous union initializer 102 * Add test case for the ioc type check 103 104Heiko Carstens (1): 105 * sparse/parse.c: ignore hotpatch attribute 106 107Jeff Layton (2): 108 * sparse: make bits_to_bytes round up instead of down 109 * Handle SForced in storage_modifiers 110 111Joe Perches (1): 112 * sparse: Allow override of sizeof(bool) warning 113 114Johannes Berg (1): 115 * implement constant-folding in __builtin_bswap*() 116 117John Keeping (3): 118 * validation/sizeof-bool: fix broken test case 119 * evaluate: split out implementation of compatible_assignment_types 120 * Support GCC's transparent unions 121 122Lance Richardson (3): 123 * sparse: ignore __assume_aligned__ attribute 124 * sparse: update __builtin_object_size() prototype 125 * sparse: add support for _Static_assert 126 127Linus Torvalds (5): 128 * Add warning about duplicate initializers 129 * Use any previous initializer to size a symbol 130 * Fix error at anoymous unions 131 * Fix scoping of extern symbols in block scope 132 * Fix initializers in anonymous structs and unions 133 134Luc Van Oostenryck (242): 135 * Teach sparse about the __COUNTER__ predefined macro 136 * Fix size calculation of unsized bool array 137 * Do not drop 'nocast' modifier when taking the address. 138 * fix mixup in "Handle SForced in storage_modifiers" 139 * Fix type checking of variadic functions 140 * add missing #include "char.h" to char.c 141 * make 'ignored_attributes[]' static 142 * cleanup: remove evaluate_arguments()'s unused argument 143 * Warn on unknown attributes instead of throwing errors 144 * Remove unneeded variable in integer_promotion() 145 * fix discarded label statement 146 * add test case for builtin bswap with constant args 147 * make ptrlist walking against robust against empty blocks 148 * let "compile" not crash on bools 149 * give comparable label's names to basic blocks 150 * OP_SWITCH should use 'insn->cond' instead of 'insn->target' 151 * remove unused field 'multijump' in struct instruction 152 * storage should not be inherited by pointers 153 * testsuite: simplify test function-pointer-inheritance 154 * use a shorter name for function-pointer-modifier-inheritance.c 155 * testsuite: test modifiers preserved by '&' operator 156 * testsuite: test modifiers preserved by 'typeof()' 157 * some modifiers need to be preserved by 'typeof()' 158 * Update maintainers in the manpage 159 * cgcc should not define non-reserved identifiers 160 * recursive phi_defines cannot happen 161 * fix missing element in types declaration 162 * add support for __int128 163 * fix typing error in compound assignment 164 * llvm: fix typing when comparing to a constant 165 * llvm: remove unneeded OP_COPY support 166 * fix cast to bool 167 * unssa: do not try to update liveness 168 * unssa: simplify rewrite of OP_PHISOURCE 169 * unssa: try to avoid some OP_PHI copies 170 * unssa: eliminate trivial phisrc copies 171 * unssa: update comment about the unneeded copies 172 * volatile loads must not be simplified 173 * fix superfluous phisrc 174 * fix phisrc mixup 175 * missing load simplification 176 * fix value of label statement 177 * C11: teach sparse about '_Thread_local' 178 * C11: teach sparse about '_Noreturn' 179 * C11: teach sparse about '_Alignof()' 180 * C11: teach sparse about '_Alignas()' 181 * C11: teach sparse about '--std={c11,gnu11}' 182 * fix cast's target type info 183 * fix crash while testing between conditional & unconditional OP_BR 184 * kill uses of replaced instructions 185 * fix killing OP_PHI instructions 186 * fix killing OP_CAST & friends 187 * fix killing OP_SELECT 188 * fix killing OP_COMPUTEDGOTO 189 * explicitely ignore killing OP_ENTRY 190 * cleanup kill_instruction() 191 * fix conditional context test case with void 192 * add helper: is_scalar_type() 193 * validate expression's type in conditionals 194 * remove unused arg in uses/defs functions 195 * add testcase for wrong early escape conversion 196 * warn on unknown escapes after preprocessing 197 * remove 'Escape' from token character class 198 * fix killing OP_SETVAL instructions 199 * define __LP64__ & _LP64 if arch_m64 is enabled 200 * add an helper for common predefined macros 201 * define __LONG_MAX__ & __SIZEOF_POINTER__ 202 * move OP_MUL simplification in a separate function 203 * simplify '(x / 1)' to 'x' 204 * simplify '(x * -1)' to '-x' 205 * simplify '(x / -1)' to '-x' (but only for signed division) 206 * simplify '(x % 1)' into '0' 207 * simplify '~(~x)' and '-(-x)' to 'x' 208 * simplify '(x || 1)' to '1' 209 * simplify '(x op x)' to '0', '1' or 'x' 210 * add warning option '-Wtautological-compare' 211 * simplify comparisons followed by an equality test against 0 or 1 212 * simplify '(x || x)' and '(x && x)' 213 * add support for LLP64 arch 214 * move evaluation & expansion of builtins in a separate file 215 * let identical symbols share their evaluate/expand methods 216 * expand __builtin_bswap*() with constant args 217 * testsuite: give a proper name to the 'binary-constant' test 218 * testsuite: make tests known to fail effectively fail 219 * testsuite: simplify the ioc-typecheck case 220 * testsuite: add a simple test for -Wenum-mismatch 221 * testsuite: add tag to ignore the output/error 222 * testsuite: report as error tests known to fail but which succeed 223 * allow to launch the test suite from the project root dir 224 * testsuite: check patterns presence or absence in output 225 * testsuite: add some selfchecking 226 * testsuite: check the nbr of times a pattern should be present 227 * testsuite: use 'error' instead of 'info' for successful tests known to fail 228 * testsuite: get 'check-known-to-fail' earlier 229 * testsuite: allow quieter error reporting 230 * testsuite: quieter error reporting for 'known-to-fail' 231 * cleanup: there is no 'struct phi' to allocate 232 * remove unused field 'multijmp' in struct statement 233 * remove unused field 'goto_bb' in struct statement 234 * fix show-parse()'s labels 235 * add killing of OP_SLICEs 236 * add killing of OP_PHISOURCEs 237 * add helper kill_use_list() 238 * fix killing of OP_PHIs 239 * fix clear_phi(), replace it by kill_instruction() 240 * remove unused clear_phi() 241 * fix killing of otherwise not-handled instructions 242 * kill_instruction() may need to be forced or not 243 * add killing of pure calls 244 * fix killing OP_CALL via pointers 245 * add killing of non-volatile loads 246 * add killing of stores 247 * fix killing of rewritten loads 248 * use kill_instruction() when killing an OP_PHI during CSE 249 * use kill_instruction() when killing any instructions during CSE 250 * fix OP_PHI usage in try_to_simplify_bb() 251 * simplify float-to-float casts that doesn't change size 252 * CSE: add test cases for comparisons duality 253 * CSE: use commutativity to identify equivalent instructions 254 * CSE: avoid hashing removed instructions 255 * fix expansion cost of pure functions 256 * add missing braces around FOR_EACH_PTR loop 257 * make -Wbitwise operational again 258 * use option: '-Woverride-init' 259 * add test case for warnings about overlapping initializers 260 * allow to warn on all overlapping initializers 261 * fix checking of overlapping initializer 262 * ignore whole-range overlapping initializer 263 * fix usage in simplify_seteq_setne() 264 * fix size of loaded bitfields 265 * split OP_BR between unconditional & conditional: OP_CBR 266 * remove unused helper is_branch_goto() 267 * replace test for c99 for-loop initializers 268 * add test case for scope of C99 for-loop declarations 269 * add test cases for storage of c99 for-loop declarations 270 * add an optional validation method to external_declaration() 271 * check the storage of C99 for-loop initializers 272 * move 'extern with initializer' validation after the validate method 273 * use VOID instead of directly using &void_pseudo 274 * teach sparse about -Waddress 275 * add is_func_type() 276 * warn if testing the address of a function 277 * add is_array_type() 278 * warn if testing the address of an array 279 * fix evaluation of a function or array symbol in conditionals 280 * fix is_scalar_type() 281 * fix test for cast to bool on 32bit machines 282 * predefine __INT_MAX__ and friends 283 * predefine __SIZEOF_INT__ & friends 284 * fix test validation/div.c 285 * fix cast to pointer to floating-point 286 * do not depends on limits.h to test __CHAR_BIT__ 287 * fix expansion of integers to floats 288 * avoid crash with test-linearize -vv 289 * fix OP_PHI usage in try_to_simplify_bb(), correctly 290 * be more careful with concat_user_list() 291 * avoid useless warning for 'bool <- restricted type' conversion 292 * introduce REPEAT_CFG_CLEANUP 293 * let kill_unreachable_bbs() clear REPEAT_CFG_CLEANUP 294 * fix: kill unreachable BBs after killing a child 295 * ignore VOID when trying to if-convert phi-nodes 296 * fix boolean context for OP_AND_BOOL & OP_OR_BOOL 297 * fix missing reload 298 * keyword: add test case for reserved '_Static_assert' 299 * keyword: regroup the [reserved] keywords 300 * keyword: explicitly add C99 & C11 keywords 301 * keyword: add more reserved keywords to the test case 302 * keyword: add a comment about NS_TYPEDEF & reserved keywords 303 * keyword: no pre-declaration needed for attribute names 304 * add get_<allocator>_stats() 305 * add show_allocation_stats() 306 * add helper handle_simple_switch() 307 * teach sparse how to handle '-fmem-report' 308 * use -fmem-report to report allocation stats 309 * testsuite: cleanup result files 310 * fix: kill old branch in insert_branch() 311 * returns the correct type when evaluating NULL 312 * remove bit_size & bit_offset from struct access_data 313 * add test case for linearize_initializer() of bitfields 314 * fix implicit zero initializer. 315 * remove alignment from struct access_data 316 * remove origval from struct access_data 317 * add support for a new flag: -fdump-linearize[=only] 318 * more tests for implicit 'bool <- restricted' casts 319 * avoid warning on explicit 'bool <- restricted' casts 320 * define ident_list 321 * teach sparse how to dump macro definitions 322 * fix hardcoded size of wide chars 323 * avoid to redefine __INT_MAX__ and friends 324 * fix definition of __SCHAR_MAX__ & friends 325 * teach sparse how to handle -dD flag 326 * let -dD report macro definitions 327 * testsuite: get all tags in once 328 * testsuite: grep the expected output only when needed 329 * testsuite: grep the output patterns only when needed 330 * testsuite: use shell arithmetic instead of fork-execing expr 331 * testsuite: remove unneeded './' before commands 332 * testsuite: avoid fork+execing basename 333 * teach cgcc about OSX aka darwin 334 * ret-void: add test case for toplevel asm 335 * ret-void: warn for implicit type 336 * use NULL instead of 0 in testcases. 337 * finer control over error vs. warnings 338 * Add more declarations for more builtin functions 339 * keep the warnings table alphabetically sorted 340 * cgcc: alphasort warning names in check_only_option() 341 * cgcc: add missing warning names to check_only_option() 342 * cgcc: filter-out '-fdump-linearize[=...]' 343 * memcpy()'s byte count is unsigned 344 * add support for -Wmemcpy-max-count 345 * add support for -fmemcpy-max-count 346 * fix: add missing examine in evaluate_dereference() 347 * fix OP_PHI usage in try_to_simplify_bb() only when non-bogus 348 * fix: try_to_simplify_bb eargerness 349 * add fallback for missing __builtin_bswapXX() 350 * fix: __builtin_bswap{16,32,64}() constantness 351 * dissect: use built_in_ident() instead of MK_IDENT() 352 * teach sparse about -m{big,little}-endian 353 * teach sparse about __{BIG,LITTLE}_ENDIAN__ 354 * teach sparse about __BYTE_ORDER__ & __ORDER_{BIG,LITTLE}_ENDIAN__ 355 * cgcc: teach cgcc about arm64 356 * cgcc: teach cgcc about ppc64[le] 357 * cgcc: teach cgcc about arm 358 * bump sparse's version to -rc3 359 * fix ptrlist corruption while killing unreachable BBs 360 * fix infinite simplification loops 361 * fix BB dependencies on phi-nodes 362 * fix crash when ep->active is NULL 363 * fix crash in rewrite_branch() 364 * fix some crashes in add_dominators() 365 * fix crash with sym->bb_target == NULL 366 * take comma expr in account for constant value 367 * fix: give a type to bad cond expr with known condition 368 * ptrlist: add a counter for the number of removed elemnets 369 * ptrlist: adjust ptr_list_size for the new ->rm field 370 * ptrlist: add MARK_CURRENT_DELETED 371 * ptrlist: avoid iteration on NULL entries 372 * mark pseudo users as deleted instead of removing them 373 * testsuite: add support for commands with timeout 374 * Remove single-store shortcut 375 * Bump sparse's version to -rc5 376 * Sparse v0.5.1 377 378Michael Stefaniuc (3): 379 * Add the __builtin functions needed for INFINITY and nan(). 380 * Add a define for __builtin_ms_va_copy() 381 * Add tests for the builtin INF and nan() functions. 382 383Oleg Nesterov (3): 384 * dissect: teach do_expression() to handle EXPR_OFFSETOF 385 * dissect: teach do_initializer() to handle the nested EXPR_IDENTIFIER's 386 * dissect: s/mode_t/usage_t/ in report_member() 387 388Omar Sandoval (1): 389 * sparse-llvm: Fix LLVM 3.5 linker errors 390 391Pavel Roskin (1): 392 * Use LLVM_CONFIG instead of llvm-config in Makefile 393 394Ramsay Jones (15): 395 * Add the __restrict__ keyword 396 * sparse: add 'gnu_inline' to the ignored attributes 397 * don't call isdigit/tolower with a char argument 398 * Makefile: suppress error message from shell 399 * don't run sparse{c,i} tests when sparse-llvm is disabled 400 * Add support for multiarch system header files 401 * cgcc: use only the cc command to determine $gcc_base_dir 402 * cgcc: use $ccom to set $multiarch_dir if not specified 403 * test-suite: remove bashism to avoid test failures 404 * cgcc: avoid passing a sparse-only option to cc 405 * parse.c: remove duplicate 'may_alias' ignored_attributes 406 * compile-i386.c: don't ignore return value of write(2) 407 * sparse: add 'alloc_align' to the ignored attributes 408 * lib: workaround the 'redeclared with different type' errors 409 * Makefile: pass -Wno-vla to sparse while checking pre-process.c 410 411Randy Dunlap (1): 412 * documentation: update email reference link 413 414Rui Teng (1): 415 * sparse: add no_sanitize_address as an ignored attribute 416 417Thomas Graf (1): 418 * sparse: Make -Werror turn warnigns into errors 419 420Tony Camuso (2): 421 * .gitignore: add cscope and Qt project files 422 * Add default case to switches on enum variables 423