All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christopher Li <sparse@chrisli.org>
To: Nicolai Stange <nicstange@gmail.com>
Cc: 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 19:24:51 +0800	[thread overview]
Message-ID: <CANeU7Q=xDWBYSWsb8NXfWYy=LDLufp4QZ+qjdn3DHBpcVZh4oQ@mail.gmail.com> (raw)
In-Reply-To: <87h96x5hzv.fsf@gmail.com>

On Thu, Nov 24, 2016 at 5:45 PM, Nicolai Stange <nicstange@gmail.com> wrote:
> 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.

That is fine for now. We can always add the option later.

> 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.

Luc's review tag should be apply when it is accepted.The script does
not add review tags by itself.  I usually add it by hand.

If yo want to add the tags in the patch, you are welcome resend the patch
with the new review tags. I just said don't need to send they if they are
exactly the same.

In this case, it is likely to have new around of patches series. We can
hold it off a bit.
>
> 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.
Yes. That is right.

For binary op, most of the case it just need to do:
new flags = left flags | right flags;

Then check if the combined result has invalid result.

> 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?

Yes, it would need to have "float constant" set on the final flag.

First of all, I think sparse will do implicit cast operation which will
add the "float constant" flag. It is the case for non-constant operations.
I need to dig deeper for constant case.

Even if there is no implicit cast operations, on the left hand you have "Int",
on the right hand you have "Float". So the combination will have "Int", "Float",
"composite op".

Base on my previous define for the arithmetic constant expressions:

>>> Integer constant expression can be tested as:
>>>
>>> !(flags & ( Addr | Float) ) && flag

The result has "Float" so it is not a integer constant expression.

>>>
>>> Arithmetic constant expression can be tested as:
>>>
>>> !(flags & Addr) ) && flag
>>>

The result does not have "Addr" so it is an arithmetic constant
expression. Your example does not break my representation.

We can still adjust the final result as needed. For most of the case
it does not need to adjust.

Other creative corner case are very welcome.

Chris

  reply	other threads:[~2016-11-24 11:24 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
2016-11-24 11:24                     ` Christopher Li [this message]
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='CANeU7Q=xDWBYSWsb8NXfWYy=LDLufp4QZ+qjdn3DHBpcVZh4oQ@mail.gmail.com' \
    --to=sparse@chrisli.org \
    --cc=josh@joshtriplett.org \
    --cc=linux-sparse@vger.kernel.org \
    --cc=luc.vanoostenryck@gmail.com \
    --cc=nicstange@gmail.com \
    /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.