aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-07-29 16:50:44 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-07-29 18:13:44 +0200
commit4932334a3205c913e61587518539a44a0941a2ef (patch)
tree3e00e53970287deb482c68c04078fec7456970d4 /validation
parentee4aea9a9b097bc0b99346a697d8a09e7f373af6 (diff)
downloadsparse-dev-4932334a3205c913e61587518539a44a0941a2ef.tar.gz
dissect: use struct symbol::visited/inspected instead of ::examined/evaluated
The dissect client uses struct symbol's fields 'examined' & 'evaluated' to avoid reprocessing the same symbols. But these fields are used internally by sparse for type examination & evaluation and despite dissect not doing these operations explicitly, they can be done implicitly (for example to handle static assertions or when the value of a constant expression is needed) inside __sparse(). If this happens, dissect.c:examine_sym_node() will be a no-op because node->examined will already be set and node->kind would be 0. Same can happen with node->evaluated. So, add a new field to struct symbol: 'inspected' and use it, as well as the existing 'visited', instead of 'evaluated' & 'examined'. This way, dissect will control its recursion via flags reserved for backends and thus never set by sparse internals. Note: when used on the kernel, this patch avoids a lot of warnings: "warning: r_member bad sym type=7 kind=0" "warning: r_member bad mem->kind = 0" and creates substantially more normal output. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> Acked-by: Oleg Nesterov <oleg@redhat.com>
Diffstat (limited to 'validation')
0 files changed, 0 insertions, 0 deletions