From: josh@joshtriplett.org
To: Nicolai Stange <nicstange@gmail.com>
Cc: linux-sparse@vger.kernel.org, viro@ZenIV.linux.org.uk
Subject: Re: [PATCH RFC 00/13] improve constexpr handling
Date: Wed, 22 Jul 2015 17:37:57 -0700 [thread overview]
Message-ID: <20150723003757.GA28528@cloud> (raw)
In-Reply-To: <87y4i7kdlq.fsf@gmail.com>
[Side note: for some reason, your mail had your message ordered *after*
your attached diff, so replies quote the diff before the message.]
On Thu, Jul 23, 2015 at 12:54:25AM +0200, Nicolai Stange wrote:
> My initial intent was to rework the current integer constant expression
> handling in order to allow for the recognition of constant subexpressions
> built up by means of __builtin_choose_expr(). Hence the first part.
>
> However, since I had to touch the whole constant expression handling
> code anyways, I decided to experimentally extend it to support
> arithmetic constant expressions and address constants as well. Hence
> the second part.
>
> Since the additional information on expressions obtained through the
> first two parts is rather pointless without making any use of it, I
> implemented part three, the checking of static storage duration
> objects' initializers for constness.
> This part is the reason why there is a 'RFC' tag in the subject.
> It is up to you to decide whether letting sparse check for C99
> conformity is a valuable thing to have or whether being stricter than
> GCC is counter-productive/completely idiotic.
I think it's absolutely a valuable thing to have. It may or may not be
the right *default* behavior, but having an appropriate -W option to
enable it would be a good start.
I've seen kernel maintainers ask people to not rely on GCC's lax
enforcement of constant initializers.
> sparse now finds 519 occurences of non-const initializers of static
> storage duration objects, 474 of which are located in drivers/acpi
> and stem from this subsystem's custom offsetof macro implemented by
> means of taking pointer differences.
Ideally, I'd suggest that ACPICA should add a translation from
ACPI_OFFSET to offsetof as part of its Linux-izing scripts.
That said, I also can't think of an obvious reason why ACPI_OFFSET
*should* be considered non-constant. Perhaps there's a detail in the
C99 spec that explains why what it does isn't OK, but it *seems* like it
should be a compile-time constant expression. I've CCed Al Viro, who
knows the C99 constant expression rules very well; Al, could you provide
some clarity here? The ACPI_OFFSET macro in question expands to this:
(acpi_size) (((u8 *) (void *) ((&(((struct some_struct *) 0)->fieldname)))) - ((u8 *) (void *) (((void *) (void *) 0))))
Does the -> make this non-constant?
- Josh Triplett
next prev parent reply other threads:[~2015-07-23 0:38 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-22 22:54 [PATCH RFC 00/13] improve constexpr handling Nicolai Stange
2015-07-23 0:37 ` josh [this message]
2015-07-23 9:13 ` Nicolai Stange
2015-07-23 18:47 ` josh
2015-08-05 7:24 ` Nicolai Stange
2015-08-10 0:06 ` Christopher Li
2015-12-29 8:34 ` Nicolai Stange
2016-01-09 18:25 ` Luc Van Oostenryck
2016-01-09 22:05 ` Nicolai Stange
2016-01-11 17:46 ` Luc Van Oostenryck
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=20150723003757.GA28528@cloud \
--to=josh@joshtriplett.org \
--cc=linux-sparse@vger.kernel.org \
--cc=nicstange@gmail.com \
--cc=viro@ZenIV.linux.org.uk \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.