Messages in this thread | | | From | Linus Torvalds <> | Date | Sat, 10 Mar 2018 08:30:40 -0800 | Subject | Re: [PATCH v3] kernel.h: Skip single-eval logic on literals in min()/max() |
| |
On Sat, Mar 10, 2018 at 7:33 AM, Kees Cook <keescook@chromium.org> wrote: > > Alright, I'm giving up on fixing max(). I'll go back to STACK_MAX() or > some other name for the simple macro. Bleh.
Oh, and I'm starting to see the real problem.
It's not that our current "min/max()" are broiken. It's that "-Wvla" is garbage.
Lookie here:
int array[(1,2)];
results in gcc saying
warning: ISO C90 forbids variable length array ‘array’ [-Wvla] int array[(1,2)]; ^~~
and that error message - and the name of the flag - is obviously pure garbage.
What is *actually* going on is that ISO C90 requires an array size to be not a constant value, but a constant *expression*. Those are two different things.
A constant expression has little to do with "compile-time constant". It's a more restricted form of it, and has actual syntax requirements. A comma expression is not a constant expression, for example, which was why I tested this.
So "-Wvla" is garbage, with a misleading name, and a misleading warning string. It has nothing to do with "variable length" and whether the compiler can figure it out at build time, and everything to do with a _syntax_ rule.
Linus
| |