From: Ingo Molnar <mingo@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>,
Kees Cook <keescook@chromium.org>,
Randy Dunlap <rdunlap@infradead.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
Josh Poimboeuf <jpoimboe@redhat.com>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
"Gustavo A. R. Silva" <gustavo@embeddedor.com>,
"Tobin C. Harding" <me@tobin.cc>,
Steven Rostedt <rostedt@goodmis.org>,
Jonathan Corbet <corbet@lwn.net>, Chris Mason <clm@fb.com>,
Josef Bacik <jbacik@fb.com>, David Sterba <dsterba@suse.com>,
"David S. Miller" <davem@davemloft.net>,
Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>,
Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
Masahiro Yamada <yamad
Subject: Re: [PATCH v3] kernel.h: Skip single-eval logic on literals in min()/max()
Date: Sun, 11 Mar 2018 12:05:43 +0100 [thread overview]
Message-ID: <20180311110543.pgcnrafloj5qbdjm@gmail.com> (raw)
In-Reply-To: <CA+55aFw+guiiJ3OavrP-RpFV9NRAF4t=oj3-GDfSyuZ9zBRfdg@mail.gmail.com>
* Linus Torvalds <torvalds@linux-foundation.org> wrote:
> So an error message like
>
> warning: ISO C90 requires array sizes to be constant-expressions
>
> would be technically correct and useful from a portability angle. It
> tells you when you're doing something non-portable, and should be
> automatically enabled with "-ansi -pedantic", for example.
>
> So what's misleading is actually the name of the warning and the
> message, not that it happens. The warning isn't about "variable
> length", it's literally about the rules for what a
> "constant-expression" is.
>
> And in C, the expression (2,3) has a constant _value_ (namely 3), but
> it isn't a constant-expression as specified by the language.
>
> Now, the thing is that once you actually do variable length arrays,
> those old front-end rules make no sense any more (outside of the "give
> portability warnings" thing).
>
> Because once you do variable length arrays, you obviously _parse_
> everything just fine, and you're doing to evaluate much more complex
> expressions than some limited constant-expression rule.
BTW., while I fully agree with everything you said, it's not entirely correct to
claim that if a C compiler can generate VLA code it is necessarily able to parse
and evaluate constant array sizes "just fine".
Constant expressions are typically parsed very early on, at the preprocessing
stage. They can be used with some preprocessor directives as well, such as '#if'
(with some further limitations on their syntax).
If VLA support is implemented in a later stage, and results in heavy-handed code
generation that will technically work for constant value expressions as well but
results in suboptimal code, then a warning should probably be emitted - and it
wouldn't be pedantic.
The existing warning is still very misleading:
warning: ISO C90 forbids variable length array ‘array’ [-Wvla]
... and if my above theory is correct then I think a better warning would be
something like:
warning: Array declaration is not a C90 constant expression, resulting in VLA code generation
... and note that in this specific case it's not misleading to talk about VLAs in
the warning text, because the array size, even if it's constant value, results in
VLA code generation.
I don't know whether GCC has such a limitation, but a quick experiment with GCC
7.2 suggests that a (2,3) array size expression results in a lot more code being
generated than with a constant expression.
Thanks,
Ingo
next prev parent reply other threads:[~2018-03-11 11:05 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-09 20:05 [PATCH v3] kernel.h: Skip single-eval logic on literals in min()/max() Kees Cook
2018-03-09 21:10 ` Linus Torvalds
2018-03-09 21:47 ` Kees Cook
2018-03-11 22:46 ` Tobin C. Harding
2018-03-13 13:31 ` David Laight
2018-03-10 0:07 ` Andrew Morton
2018-03-10 0:28 ` Linus Torvalds
2018-03-10 0:32 ` Andrew Morton
2018-03-10 0:38 ` Linus Torvalds
2018-03-10 1:30 ` Kees Cook
2018-03-10 1:31 ` Kees Cook
2018-03-10 2:37 ` Linus Torvalds
[not found] ` <20180310023907.798690563@goodmis.org>
2018-03-10 3:10 ` [PATCH 3/3] tracing: Rewrite filter logic to be simpler and faster Steven Rostedt
2018-03-10 3:15 ` Steven Rostedt
2018-03-10 3:22 ` Steven Rostedt
2018-03-12 22:55 ` [PATCH v3] kernel.h: Skip single-eval logic on literals in min()/max() Andrew Morton
2018-03-12 23:57 ` Linus Torvalds
2018-03-13 4:28 ` Kees Cook
2018-03-13 21:02 ` Andrew Morton
2018-03-13 22:14 ` Kees Cook
2018-03-14 11:35 ` David Laight
2018-03-10 3:11 ` Randy Dunlap
2018-03-10 6:10 ` Miguel Ojeda
2018-03-10 7:03 ` Miguel Ojeda
2018-03-10 16:04 ` Linus Torvalds
2018-03-10 15:33 ` Kees Cook
2018-03-10 16:11 ` Linus Torvalds
2018-03-10 16:30 ` Linus Torvalds
2018-03-10 17:34 ` Miguel Ojeda
2018-03-10 17:51 ` Linus Torvalds
2018-03-10 19:08 ` Miguel Ojeda
2018-03-11 11:05 ` Ingo Molnar [this message]
2018-03-11 18:23 ` Linus Torvalds
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=20180311110543.pgcnrafloj5qbdjm@gmail.com \
--to=mingo@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=clm@fb.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=dsterba@suse.com \
--cc=gustavo@embeddedor.com \
--cc=jbacik@fb.com \
--cc=jpoimboe@redhat.com \
--cc=keescook@chromium.org \
--cc=kuznet@ms2.inr.ac.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=me@tobin.cc \
--cc=miguel.ojeda.sandonis@gmail.com \
--cc=peterz@infradead.org \
--cc=rdunlap@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=yoshfuji@linux-ipv6.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).