From: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
To: Nicolai Stange <nicstange@gmail.com>
Cc: linux-sparse@vger.kernel.org, Christopher Li <sparse@chrisli.org>,
Josh Triplett <josh@joshtriplett.org>
Subject: Re: [PATCH v2 09/13] expression: examine constness of __builtin_offsetof at evaluation only
Date: Tue, 26 Jan 2016 02:57:09 +0100 [thread overview]
Message-ID: <20160126015708.GG46188@macpro.local> (raw)
In-Reply-To: <87r3h5eman.fsf@gmail.com>
On Mon, Jan 25, 2016 at 04:00:48PM +0100, Nicolai Stange wrote:
> Currently, the determination of a __builtin_offsetof() expressions'
> constness flags is done in two steps:
> - Several flags are speculatively set at expression parsing time
> - and possibly cleared again at evaluation if the member expression
> includes a non-const array index like in
> __builtin_offsetof(struct A, a.b[non_const_foo])
>
> For consistency with other expression types' evaluation, defer the
> determination of a __builtin_offsetof() expression's constness to
> evaluation time, too.
>
> Furthermore, carry an array index expression's constness flags
> through the implicit cast to size_t type.
Better to split this into two patches.
> @@ -3028,13 +3026,18 @@ static struct symbol *evaluate_offsetof(struct expression *expr)
> } else {
> struct expression *idx = expr->index, *m;
> struct symbol *i_type = evaluate_expression(idx);
> + unsigned old_idx_flags;
> int i_class = classify_type(i_type, &i_type);
> +
> if (!is_int(i_class)) {
> expression_error(expr, "non-integer index");
> return NULL;
> }
> unrestrict(idx, i_class, &i_type);
> + old_idx_flags = idx->flags;
> idx = cast_to(idx, size_t_ctype);
> + idx->flags |= old_idx_flags;
> + expr_flags_decay_consts(&idx->flags);
> m = alloc_const_expression(expr->pos,
> bits_to_bytes(ctype->bit_size));
> m->ctype = size_t_ctype;
It's not clear at all to me why this is needed.
Why cast_to() can't set itself the right value for idx->flags?
Luc
next prev parent reply other threads:[~2016-01-26 1:57 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-25 14:47 [PATCH v2 00/13] improve constexpr handling Nicolai Stange
2016-01-25 14:49 ` [PATCH v2 01/13] expression: introduce additional expression constness tracking flags Nicolai Stange
2016-01-25 21:51 ` Luc Van Oostenryck
2016-01-26 15:26 ` Nicolai Stange
2016-01-26 15:37 ` Nicolai Stange
2016-01-25 14:51 ` [PATCH v2 02/13] expression: examine constness of casts at evaluation only Nicolai Stange
2016-01-25 22:02 ` Luc Van Oostenryck
2016-01-26 16:11 ` Nicolai Stange
2016-01-25 14:52 ` [PATCH v2 03/13] expression: examine constness of binops and alike " Nicolai Stange
2016-01-26 0:14 ` Luc Van Oostenryck
2016-01-26 15:50 ` Nicolai Stange
2016-01-26 17:24 ` Luc Van Oostenryck
2016-01-27 10:42 ` Nicolai Stange
2016-01-27 18:00 ` Luc Van Oostenryck
2016-01-26 0:59 ` Luc Van Oostenryck
2016-01-25 14:53 ` [PATCH v2 04/13] expression: examine constness of preops " Nicolai Stange
2016-01-26 1:10 ` Luc Van Oostenryck
2016-01-25 14:55 ` [PATCH v2 05/13] expression: examine constness of conditionals " Nicolai Stange
2016-01-26 1:16 ` Luc Van Oostenryck
2016-01-25 14:56 ` [PATCH v2 06/13] expression, evaluate: add support for recognizing address constants Nicolai Stange
2016-01-26 1:27 ` Luc Van Oostenryck
2016-01-26 3:10 ` Luc Van Oostenryck
2016-01-25 14:57 ` [PATCH v2 07/13] evaluate: check static storage duration objects' intializers' constness Nicolai Stange
2016-01-26 1:42 ` Luc Van Oostenryck
2016-01-26 16:08 ` Nicolai Stange
2016-01-26 17:56 ` Luc Van Oostenryck
2016-01-26 20:18 ` Luc Van Oostenryck
2016-02-01 3:00 ` Nicolai Stange
2016-01-25 14:59 ` [PATCH v2 08/13] expression: recognize references to labels as address constants Nicolai Stange
2016-01-26 1:45 ` Luc Van Oostenryck
2016-01-25 15:00 ` [PATCH v2 09/13] expression: examine constness of __builtin_offsetof at evaluation only Nicolai Stange
2016-01-26 1:57 ` Luc Van Oostenryck [this message]
2016-02-01 3:06 ` Nicolai Stange
2016-01-25 15:02 ` [PATCH v2 10/13] symbol: flag builtins constant_p, safe_p and warning as constexprs Nicolai Stange
2016-01-26 2:00 ` Luc Van Oostenryck
2016-01-25 15:03 ` [PATCH v2 11/13] evaluate: relax some constant expression rules for pointer expressions Nicolai Stange
2016-01-26 2:05 ` Luc Van Oostenryck
2016-01-25 15:04 ` [PATCH v2 12/13] expression, evaluate: support compound literals as address constants Nicolai Stange
2016-01-26 2:07 ` Luc Van Oostenryck
2016-01-25 15:05 ` [PATCH v2 13/13] symbol: do not inherit storage modifiers from base types at examination Nicolai Stange
2016-01-26 2:54 ` Luc Van Oostenryck
2016-01-25 21:01 ` [PATCH v2 00/13] improve constexpr handling Luc Van Oostenryck
2016-01-25 21:26 ` Nicolai Stange
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160126015708.GG46188@macpro.local \
--to=luc.vanoostenryck@gmail.com \
--cc=josh@joshtriplett.org \
--cc=linux-sparse@vger.kernel.org \
--cc=nicstange@gmail.com \
--cc=sparse@chrisli.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).