expressions: add cast_expression()
[smatch.git] / Documentation / release-notes / v0.5.1.rst
blob7853bcf24bc69a33c819cd4be1ec59ce79307e82
1 v0.5.1 (2017-08-18)
2 ===================
4 It is finally there. Sparse 0.5.1 is released.
6 I consider this the best quality of release of sparse I ever
7 experienced so far. There are lots of enhancement and bug fixes
8 incorporate into this release.
10 I would like to thank every one that contributes to this release,
11 people who submit patches, perform testing and send bug
12 reports.
14 I want to specially thank Luc Van Oostenryck who makes this
15 release possible. He has 242 commits in this release, far more
16 than any one else.
18 The development effort for the next release has already began.
20 Finally, I would like to call for developers joining the sparse project.
21 If you are interested in modern compilers, reading compiler books
22 and want some excise. Sparse is a good project to start.
24 Sparse is very small, the project compiles under 10 seconds.
25 It can digest the full kernel source file, generate internal byte
26 code representation and perform check on it. All this happens in
27 1/10 of the time it took gcc to compile the same source file.
29 Here is some project ideas,
30 https://git.kernel.org/pub/scm/devel/sparse/sparse.git/tree/Documentation/project-ideas.md?h=v0.5.1
32 Thanks
34 Chris
36 Aaro Koskinen (1):
37    * build: allow use of PKG_CONFIG to override pkg-config
39 Andy Shevchenko (1):
40    * lib.c: skip --param parameters
42 Ard Biesheuvel (2):
43    * sparse: treat function pointers as pointers to const data
44    * Ignore pure attribute in assignement
46 Azat Khuzhin (2):
47    * sparse, llvm: compile: skip function prototypes to avoid SIGSEGV
48    * validation/prototype: regression for skipping prototypes
50 Christian Borntraeger (1):
51    * s390x: add the proper defines for data types
53 Christopher 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
79 Cody 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
84 Dan Carpenter (1):
85    * ptrlist: reading deleted items in NEXT_PTR_LIST()
87 Daniel Wagner (1):
88    * parse: Add comment to struct statement
90 Edward Cree (1):
91    * Allow casting to a restricted type if !restricted_value
93 Emilio G. Cota (1):
94    * Define __CHAR_BIT__
95 Emily Maier (2):
96    * linearize: Emit C99 declarations correctly
97    * validation: Check C99 for loop variables
99 Hans 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
104 Heiko Carstens (1):
105    * sparse/parse.c: ignore hotpatch attribute
107 Jeff Layton (2):
108    * sparse: make bits_to_bytes round up instead of down
109    * Handle SForced in storage_modifiers
111 Joe Perches (1):
112    * sparse: Allow override of sizeof(bool) warning
114 Johannes Berg (1):
115    * implement constant-folding in __builtin_bswap*()
117 John 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
122 Lance Richardson (3):
123    * sparse: ignore __assume_aligned__ attribute
124    * sparse: update __builtin_object_size() prototype
125    * sparse: add support for _Static_assert
127 Linus 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
134 Luc 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
378 Michael 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.
383 Oleg 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()
388 Omar Sandoval (1):
389    * sparse-llvm: Fix LLVM 3.5 linker errors
391 Pavel Roskin (1):
392    * Use LLVM_CONFIG instead of llvm-config in Makefile
394 Ramsay 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
411 Randy Dunlap (1):
412    * documentation: update email reference link
414 Rui Teng (1):
415    * sparse: add no_sanitize_address as an ignored attribute
417 Thomas Graf (1):
418    * sparse: Make -Werror turn warnigns into errors
420 Tony Camuso (2):
421    * .gitignore: add cscope and Qt project files
422    * Add default case to switches on enum variables