All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolai Stange <nicstange@gmail.com>
To: Christopher Li <sparse@chrisli.org>
Cc: Nicolai Stange <nicstange@gmail.com>,
	Luc Van Oostenryck <luc.vanoostenryck@gmail.com>,
	Linux-Sparse <linux-sparse@vger.kernel.org>,
	Josh Triplett <josh@joshtriplett.org>
Subject: Re: [PATCH v3 00/21] improve constexpr handling
Date: Thu, 24 Nov 2016 10:45:08 +0100	[thread overview]
Message-ID: <87h96x5hzv.fsf@gmail.com> (raw)
In-Reply-To: <CANeU7Qm21LCu2GgdTLbcDERBbgdYWoX_wp4DTKaFdi=G1ZcqAQ@mail.gmail.com> (Christopher Li's message of "Thu, 24 Nov 2016 09:18:20 +0800")

Christopher Li <sparse@chrisli.org> writes:

> On Thu, Nov 24, 2016 at 2:33 AM, Nicolai Stange <nicstange@gmail.com> wrote:
>>
>> While doing this, I recognized that sparse's current constant expression
>> tagging scheme was quite limited and I had to touch everything related
>> to it anyway. So I asked on this list on whether it would be a good
>> thing to let sparse be more strict than gcc in this regard and the
>> feedback was that it certainly would (at user option).
>
> Good. Thanks for reminding of that. So ideally this is under a more
> strict options.

As it stands, [09/21] ("evaluate: check static storage duration objects'
intializers' constness"), introduces the opt-in -Wconstexpr-not-const.
This affects only initializers for objects of static storage duration.

So, there is currently no way to opt out from the stricter integer
constant expression checks etc. introduced with this series.

I ran sparse with this series applied on the kernel back then and if I
remember correctly, there was no spectacular difference though.

If these stricter semantics nevertheless became a problem, this would be
easily "fixable" by further relaxing them at user option, I think.


> No, please don't send the series again. I have a script system to
> process the patches now. So no patch will be missed from now on.

Alright. May I further ask whether you've got all these precious
Reviewed-by tags from Luc carried over? He did a great amount of review
work on this series and it would be quite sad if these got lost.
I still have them, so just tell me if you need a list. If not:
nevermind.


>>> Integer constant expression can be tested as:
>>>
>>> !(flags & ( Addr | Float) ) && flag
>>>
>>> Arithmetic constant expression can be tested as:
>>>
>>> !(flags & Addr) ) && flag
>>>
>>> Do you see any problem with this internal representation?
>>
>> (int)0.0 is an integer constant expression.
>>
>> In your scheme, it would have "composite op" and "float" set?
>> The integer constant expression test you proposed above would
>> fail in this case.
>>
>
> (int) 0.0 will express as "Composite op" and "Int const" set.
> Cast is a special operation it will strip the "float" and convert it
> to "int". After all that is what cast does.

Ah ok, i mistook you in the semantics of the composite op flag.


> It will not change your patch behavior and warning etc, it is just
> a internal representation difference. How the constant expression
> bits are store and interpreted.

Yes, yes got that. Don't get me wrong, I'm not defending my particular
choice of flags. If yours leads to cleaner/less code, I will be very
happy.

That being said, here's the next "corner case":

  0 + 'a'

Which flags would be set for this binary expression? All of "composite
op", "integer const", "char const"?

That would work with your test for integer constant expressions.

I think, it wouldn't be enough to just set "composite op" flag w/o
anything else since the above integer constant expression needs to get
distinguished from

  0 + 0.0

which is an arithmetic constant expression only. Thus, considering your
tests for integer vs. arithmetic constant expressions, this would need
to have at least its "float constant" flag set?


Thank you,

Nicolai

  reply	other threads:[~2016-11-24  9:45 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-01  2:28 [PATCH v3 00/21] improve constexpr handling Nicolai Stange
2016-02-01  2:29 ` [PATCH v3 01/21] expression: introduce additional expression constness tracking flags Nicolai Stange
2016-03-15 21:23   ` Luc Van Oostenryck
2016-02-01  2:30 ` [PATCH v3 02/21] expression: init constexpr_flags at expression allocation Nicolai Stange
2016-03-15 16:59   ` Luc Van Oostenryck
2016-02-01  2:31 ` [PATCH v3 03/21] expression: examine constness of casts at evaluation only Nicolai Stange
2016-03-15 20:43   ` Luc Van Oostenryck
2016-02-01  2:32 ` [PATCH v3 04/21] expression: examine constness of binops and alike " Nicolai Stange
2016-03-15 17:06   ` Luc Van Oostenryck
2016-02-01  2:33 ` [PATCH v3 05/21] expression: examine constness of preops " Nicolai Stange
2016-03-15 17:09   ` Luc Van Oostenryck
2016-02-01  2:34 ` [PATCH v3 06/21] expression: examine constness of conditionals " Nicolai Stange
2016-03-15 17:11   ` Luc Van Oostenryck
2016-02-01  2:35 ` [PATCH v3 07/21] expression: add support for tagging arithmetic constant expressions Nicolai Stange
2016-03-15 17:13   ` Luc Van Oostenryck
2016-02-01  2:36 ` [PATCH v3 08/21] expression, evaluate: add support for tagging address constants Nicolai Stange
2016-03-15 17:15   ` Luc Van Oostenryck
2016-02-01  2:37 ` [PATCH v3 09/21] evaluate: check static storage duration objects' intializers' constness Nicolai Stange
2016-03-15 17:28   ` Luc Van Oostenryck
2016-02-01  2:38 ` [PATCH v3 10/21] expression, evaluate: recognize static objects as address constants Nicolai Stange
2016-03-15 17:38   ` Luc Van Oostenryck
2016-02-01  2:39 ` [PATCH v3 11/21] evaluate: recognize address constants created through casts Nicolai Stange
2016-03-15 17:44   ` Luc Van Oostenryck
2016-02-01  2:39 ` [PATCH v3 12/21] evaluate: recognize address constants created through pointer arithmetic Nicolai Stange
2016-03-15 17:46   ` Luc Van Oostenryck
2016-02-01  2:40 ` [PATCH v3 13/21] evaluate: recognize members of static compound objects as address constants Nicolai Stange
2016-03-15 17:46   ` Luc Van Oostenryck
2016-02-01  2:41 ` [PATCH v3 14/21] evaluate: recognize string literals " Nicolai Stange
2016-03-15 17:46   ` Luc Van Oostenryck
2016-02-01  2:42 ` [PATCH v3 15/21] expression: recognize references to labels " Nicolai Stange
2016-03-15 17:47   ` Luc Van Oostenryck
2016-02-01  2:42 ` [PATCH v3 16/21] expression: examine constness of __builtin_offsetof at evaluation only Nicolai Stange
2016-03-15 19:52   ` Luc Van Oostenryck
2016-02-01  2:43 ` [PATCH v3 17/21] symbol: flag builtins constant_p, safe_p and warning as constexprs Nicolai Stange
2016-03-15 19:45   ` Luc Van Oostenryck
2016-02-01  2:44 ` [PATCH v3 18/21] evaluate: relax some constant expression rules for pointer expressions Nicolai Stange
2016-03-15 17:47   ` Luc Van Oostenryck
2016-03-15 19:44     ` Luc Van Oostenryck
2016-03-15 18:10   ` Luc Van Oostenryck
2016-02-01  2:45 ` [PATCH v3 19/21] expression, evaluate: support compound literals as address constants Nicolai Stange
2016-03-15 20:02   ` Luc Van Oostenryck
2016-02-01  2:46 ` [PATCH v3 20/21] symbol: do not inherit storage modifiers from base types at examination Nicolai Stange
2016-03-15 20:31   ` Luc Van Oostenryck
2016-02-01  2:47 ` [PATCH v3 21/21] evaluation: treat comparsions between types as integer constexpr Nicolai Stange
2016-03-15 20:34   ` Luc Van Oostenryck
2016-02-19  8:22 ` [PATCH v3 00/21] improve constexpr handling Nicolai Stange
2016-02-24  9:45   ` Christopher Li
2016-02-24 12:13     ` Nicolai Stange
2016-03-15 16:54   ` Luc Van Oostenryck
2016-03-15 22:36 ` Luc Van Oostenryck
2016-10-28 20:28   ` Luc Van Oostenryck
2016-11-23  3:12 ` Christopher Li
2016-11-23  4:05   ` Luc Van Oostenryck
2016-11-23  6:49     ` Christopher Li
2016-11-23  8:39       ` Nicolai Stange
2016-11-23 15:36         ` Christopher Li
2016-11-23 16:43           ` Nicolai Stange
2016-11-23 17:38             ` Christopher Li
2016-11-23 18:23               ` Christopher Li
2016-11-23 18:33               ` Nicolai Stange
2016-11-24  1:18                 ` Christopher Li
2016-11-24  9:45                   ` Nicolai Stange [this message]
2016-11-24 11:24                     ` Christopher Li
2016-11-24 17:22                       ` Luc Van Oostenryck
2016-12-06  6:00                     ` Christopher Li
2016-12-06 16:54                       ` Luc Van Oostenryck
2017-03-29 14:42                       ` Luc Van Oostenryck
2017-03-31  5:06                         ` Christopher Li
2017-03-31  8:55                           ` Luc Van Oostenryck
2017-03-31 10:40                             ` Christopher Li
2017-03-31 19:47                               ` 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=87h96x5hzv.fsf@gmail.com \
    --to=nicstange@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=linux-sparse@vger.kernel.org \
    --cc=luc.vanoostenryck@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 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.