Here by 'simple' we really mean 'worth of putting in a register'. We select all scalar types as well as struct and unions with a size not bigger than a long (register). Global and static variables, variables which address have been taken and volatiles variables are never selected. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> --- symbol.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/symbol.h b/symbol.h index 327449611..3f075c5bc 100644 --- a/symbol.h +++ b/symbol.h @@ -407,6 +407,39 @@ static inline int is_scalar_type(struct symbol *type) return 0; } +static inline int is_simple_type(struct symbol *type) +{ + if (type->type == SYM_NODE) + type = type->ctype.base_type; + switch (type->type) { + case SYM_ENUM: + case SYM_BITFIELD: + case SYM_PTR: + case SYM_RESTRICT: // OK, always integer types + return 1; + case SYM_STRUCT: + case SYM_UNION: + return type->bit_size <= long_ctype.bit_size; + default: + break; + } + if (type->ctype.base_type == &int_type) + return 1; + if (type->ctype.base_type == &fp_type) + return 1; + return 0; +} + +static inline int is_simple_var(struct symbol *var) +{ + if (!is_simple_type(var)) + return 0; +#define MOD_NONREG (MOD_STATIC|MOD_NONLOCAL|MOD_ADDRESSABLE|MOD_VOLATILE) + if (var->ctype.modifiers & MOD_NONREG) + return 0; + return 1; +} + static inline int is_function(struct symbol *type) { return type && type->type == SYM_FN; -- 2.14.0 -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html