states: rename unreachable() to is_unreachable()
[smatch.git] / Documentation / release-notes / v0.6.4.rst
blob08830bd83ad577a1101a964b562d70fd0e177696
1 v0.6.4 (2021-09-06)
2 ===================
4 Fixes:
5   * build: fix version.h dependencies
6   * fix and complete the evaluation of atomic builtins
7   * fix some testcases related to bitfield manipulation
8   * llvm: fix crash with llvm-11 / use real phi-nodes
9   * fix: OP_INLINE should not use the function symbol
10   * fix testing if a OP_CALL's function is pure
11   * warn on all missing parameter types
12   * fix init_linearized_builtins()
13   * fix usage count in linearize_fma()
14   * linearize: fix a couple of 'selfcheck' warnings
15   * cfg: remove phi-sources when merging BBs
16   * cfg: remove phi-nodes when merging BBs
17   * cfg: add missing REPEAT_CFG_CLEANUP
18   * fix: rebuild dominance tree during CFG cleanup
19   * fix: drop qualifiers of casts and comma or statement expressions
20   * fix kill_insn(OP_SETVAL)
21   * fix trivial_phi() when the target is before the single value
22   * memops: fix wrong killing of stores partially dominated by a load
23   * memops: kill dead loads before phi-node conversion
24   * memops: kill more dead stores
25   * fix rem_usage() when the pseudo has a use list but is not PSEUDO_REG
26   * shut up a silly -Wmaybe-uninitialized warning
27   * fix add_join_conditional() when one of the alternative is VOID
28   * asm: fix killing OP_ASM
29   * asm: fix a test failure on 32-bit systems
30   * asm: output *memory* operands need their address as *input*
31   * asm: teach dominates() about OP_ASM
32   * fix the type in the assignment of 0 to a restricted variable
33   * fix SSA conversion of mismatched memops
34   * fix and improve the check that protects try_to_simplify_bb()
35   * fix remove_merging_phisrc() with duplicated CFG edges.
36   * fix null-pointer crash with with ident same as one of the attributes
38 New:
39   * improve CFG simplification
40   * teach sparse about -funsigned-bitfields
41   * add a symbolic checker
42   * expand __builtin_object_size()
43   * let plain bitfields default to signed
44   * add support for __packed struct
45   * handle qualified anonymous structures
46   * move check_access() to late_warnings()
47   * let phi-sources to directly access to their phi-node
48   * small improvements to the ptrlist API
49   * warn when taking the address of a built-in function
50   * handle more graciously labels with no statement
51   * give an explicit type to compare's operands
52   * give a type to OP_SYMADDR
53   * add some notes about pseudos being typeless
54   * shrink struct basic_block
55   * pre-proc: strip leading "./" from include paths
56   * pre-proc: do some path normalization
57   * linearize __builtin_isdigit()
59 IR Simplifications:
60   * simplify: essential OP_ADD & OP_SUB simplifications
61   * simplify and canonicalize unsigned compares
62   * simplify: basic unop simplifications
63   * simplify SEL(SEL(...), ...)
64   * simplify SEL(x == y, x, y) and friends
65   * simplify SEL(x, x, x) and SEL(x, 0, x)
66   * simplify & canonicalize compares
67   * simplify CBR-CBR on the same condition
68   * simplify unrestricted postop
69   * simplification of computed gotos with 1 or 2 targets
70   * simplify kill_insn() of unops and unop-ish instructions
71   * simplify: put PSEUDO_ARGS and PSEUDO_REGs in canonical order too
72   * simplify (~x {&,|,^} x) --> {0,~0,~0}
73   * simplify ((x cmp y) {&,|,^} (x !cmp y)) --> {0,1,1}
74   * simplify LSR + SEXT into ASR
75   * simplify and canonicalize signed compares
76   * simplify CMP(AND(x,M), C) and CMP(OR(x,M), C)
77   * simplify AND(x >= 0, x < C) --> (unsigned)x < C
78   * simplify TRUNC(x) {==,!=} C --> AND(x,M) {==,!=} C
79   * simplify of TRUNC(NOT(x)) --> NOT(TRUNC(x))
80   * factorize (x OP1 z) OP2 (y OP1 z) into (x OP2 y) OP1 z
81   * factorize SHIFT(x, s) OP SHIFT(y, s) into SHIFT((x OP y), s)
82   * factorize SEL(x, OP(y,z), y) into OP(SEL(x, z, 0), y)
83   * convert SEL(x & BIT1, BIT2, 0) into SHIFT(x & BIT1, S)
84   * canonicalize ((x & M) == M) --> ((x & M) != 0) when M is a power-of-2
86 Testsuite:
87   * testsuite: add new tags: check-output-{match,returns}
88   * testsuite: fix parsing of tags used in the testcases
89   * testsuite: add option '-r' to 'test-suite format'
91 Documentation:
92   * doc: fix: Sphinx's option ':noindex:' renamed into ':noindexentry:'
93   * doc: fix extracted autodoc when short description ends with a '?'
94   * doc: add some doc about using NULL or VOID in pointer lists
95   * doc: add some doc to flowgraph.h
96   * doc: extract doc related to simplification
98 Cleanups:
99   * slice: small reorg of OP_SLICE in preparation for some incoming changes
100   * cleanup: removed an unused parameter for show_symbol_list()
101   * cleanup linearize_cond_branch()
102   * cleanup: remove unneeded REPEAT_SYMBOL_CLEANUP
103   * cleanup: no needs to use MARK_CURRENT_DELETED() for multi-jumps
104   * linearize: remove unneeded forward declarations
105   * linearize: only allocate call instructions when needed