Message ID | 20160208132657.GA19007@redhat.com (mailing list archive) |
---|---|
State | Mainlined, archived |
Headers | show |
+++ Oleg Nesterov [08/02/16 14:26 +0100]: >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@redhat.com> LGTM, builds and test case works as expected. Acked-by: Lance Richardson <lrichard@redhat.com> -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Feb 08, 2016 at 02:26:57PM +0100, Oleg Nesterov wrote: > Starting from a194f3e0 "implement __builtin_offsetof()" sparse handles > offsetof() internally but dissect.c wasn't updated. > LGTM Reviewed-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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@tv-sign.ru> + * Started by Oleg Nesterov <oleg@redhat.com> * * 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); }
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@redhat.com> --- dissect.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)