public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/99156] New: __builtin_expect affects the interpretation of its first operand
@ 2021-02-19 4:29 zhan3299 at purdue dot edu
2021-02-19 15:15 ` [Bug c/99156] " marxin at gcc dot gnu.org
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: zhan3299 at purdue dot edu @ 2021-02-19 4:29 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99156
Bug ID: 99156
Summary: __builtin_expect affects the interpretation of its
first operand
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: zhan3299 at purdue dot edu
Target Milestone: ---
I hope it does not bother. I try to refer to a bug in llvm which may also
affect gcc.
Following are copied-and-pasted from the discussion about a similar bug in
clang (https://bugs.llvm.org/show_bug.cgi?id=49239#c3).
Specifically,
> int maybe_vla(int n) {
> goto label;
> int arr[({0;})];
> label:
> return sizeof(arr);
> }
>
> ... is rejected by both Clang and GCC because the statement-expression is not an ICE, but
>
> int maybe_vla(int n) {
> goto label;
> int arr[__builtin_expect(({0;}), 0)];
> label:
> return sizeof(arr);
> }
>
> ... is accepted. This seems like a bug in both compilers to me: __builtin_expect isn't supposed to affect the interpretation of its first operand, and presumably shouldn't be weakening the strict ICE checks.
case 1: https://godbolt.org/z/zWGEfx
case 2: https://godbolt.org/z/bejfcc
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c/99156] __builtin_expect affects the interpretation of its first operand
2021-02-19 4:29 [Bug c/99156] New: __builtin_expect affects the interpretation of its first operand zhan3299 at purdue dot edu
@ 2021-02-19 15:15 ` marxin at gcc dot gnu.org
2021-02-19 21:32 ` zhan3299 at purdue dot edu
2021-07-23 18:18 ` [Bug c/99156] __builtin_expect is folded too soon allowing an non-integer-constant-expr to become an integer-const-expr pinskia at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: marxin at gcc dot gnu.org @ 2021-02-19 15:15 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99156
Martin Liška <marxin at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2021-02-19
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
CC| |marxin at gcc dot gnu.org
--- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> ---
Yes, I can confirm the issue. Thanks for the report.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c/99156] __builtin_expect affects the interpretation of its first operand
2021-02-19 4:29 [Bug c/99156] New: __builtin_expect affects the interpretation of its first operand zhan3299 at purdue dot edu
2021-02-19 15:15 ` [Bug c/99156] " marxin at gcc dot gnu.org
@ 2021-02-19 21:32 ` zhan3299 at purdue dot edu
2021-07-23 18:18 ` [Bug c/99156] __builtin_expect is folded too soon allowing an non-integer-constant-expr to become an integer-const-expr pinskia at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: zhan3299 at purdue dot edu @ 2021-02-19 21:32 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99156
--- Comment #2 from zhan3299 at purdue dot edu ---
(In reply to Martin Liška from comment #1)
> Yes, I can confirm the issue. Thanks for the report.
Many thanks for your prompt reply. Additionally, I have to give credit to
Richard Smith for finding the root cause.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c/99156] __builtin_expect is folded too soon allowing an non-integer-constant-expr to become an integer-const-expr
2021-02-19 4:29 [Bug c/99156] New: __builtin_expect affects the interpretation of its first operand zhan3299 at purdue dot edu
2021-02-19 15:15 ` [Bug c/99156] " marxin at gcc dot gnu.org
2021-02-19 21:32 ` zhan3299 at purdue dot edu
@ 2021-07-23 18:18 ` pinskia at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-07-23 18:18 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99156
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|__builtin_expect affects |__builtin_expect is folded
|the interpretation of its |too soon allowing an
|first operand |non-integer-constant-expr
| |to become an
| |integer-const-expr
CC| |pinskia at gcc dot gnu.org
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Here is another example which shows the problem even further:
int maybe_vla(int n) {
goto label;
int arr[__builtin_expect(n-n, 0)];
label:
return sizeof(arr);
}
int main() { return maybe_vla(0); }
---- CUT ----
Basically __builtin_expect is folded too soon which allows the argument to be
considered a constant integer expression :).
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-07-23 18:18 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-19 4:29 [Bug c/99156] New: __builtin_expect affects the interpretation of its first operand zhan3299 at purdue dot edu
2021-02-19 15:15 ` [Bug c/99156] " marxin at gcc dot gnu.org
2021-02-19 21:32 ` zhan3299 at purdue dot edu
2021-07-23 18:18 ` [Bug c/99156] __builtin_expect is folded too soon allowing an non-integer-constant-expr to become an integer-const-expr pinskia at gcc dot gnu.org
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 read-only IMAP folder(s) and NNTP newsgroup(s).