Starting from a194f3e0 "implement __builtin_offsetof()" sparse handles offsetof() internally but dissect.c wasn't updated. Test case: struct S { int m; }; void func(void) { __builtin_offsetof(struct S, m); } before this patch: 3:6 g def func void ( ... ) T.c:5:38: warning: bad expr->type: 30 after: 3:6 g def func void ( ... ) 1:8 s def S 5:38 s --- S.m int While at it, update my email. Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx> --- dissect.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/dissect.c b/dissect.c index d211bca..19f3276 100644 --- a/dissect.c +++ b/dissect.c @@ -1,7 +1,7 @@ /* * sparse/dissect.c * - * Started by Oleg Nesterov <oleg@xxxxxxxxxx> + * Started by Oleg Nesterov <oleg@xxxxxxxxxx> * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -429,6 +429,20 @@ again: lookup_member(p_type, expr->member, NULL)); } + break; case EXPR_OFFSETOF: { + struct symbol *in = base_type(expr->in); + + do { + if (expr->op == '.') { + in = report_member(U_VOID, &expr->pos, in, + lookup_member(in, expr->ident, NULL)); + } else { + do_expression(U_R_VAL, expr->index); + in = in->ctype.base_type; + } + } while ((expr = expr->down)); + } + break; case EXPR_SYMBOL: ret = report_symbol(mode, expr); } -- 2.5.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