diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-07-29 16:50:44 +0200 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-07-29 18:13:44 +0200 |
| commit | 4932334a3205c913e61587518539a44a0941a2ef (patch) | |
| tree | 3e00e53970287deb482c68c04078fec7456970d4 /validation/preprocessor | |
| parent | ee4aea9a9b097bc0b99346a697d8a09e7f373af6 (diff) | |
| download | sparse-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/preprocessor')
0 files changed, 0 insertions, 0 deletions
