public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c/111405] New: Problem with incorrect optimizion for "constexpr" function with possible overflow @ 2023-09-13 15:23 3180104919 at zju dot edu.cn 2023-09-13 15:27 ` [Bug c/111405] " pinskia at gcc dot gnu.org ` (2 more replies) 0 siblings, 3 replies; 4+ messages in thread From: 3180104919 at zju dot edu.cn @ 2023-09-13 15:23 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111405 Bug ID: 111405 Summary: Problem with incorrect optimizion for "constexpr" function with possible overflow Product: gcc Version: 13.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: 3180104919 at zju dot edu.cn Target Milestone: --- Created attachment 55891 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=55891&action=edit A demo file contains a funciton that will be wrongly optimized using -O2 I happened to find this problem when I did the CSAPP lab. int isTmax(int x) { // make it all of 1 // it's quite strange that the results of x + 1 + x and x + x + 1 are different int c = x + x + 1; // check if it's all of 1 int flag_all_ones = !(~c); // avoid -1 int flag_not_neg1 = !!(x + 1); return flag_all_ones & flag_not_neg1; } This function will be incorrectly optimized to return zero only with "-O2" compiler flag. But in fact isTmax(0x7fffffff) should return 1. Here's the disassembly code using coredump: 000012ac <isTmax>: // check if it's all of 1 int flag_all_ones = !(~c); // avoid -1 int flag_not_neg1 = !!(x + 1); return flag_all_ones & flag_not_neg1; } 12ac: b8 00 00 00 00 mov $0x0,%eax 12b1: c3 ret This function can be correctly compiled with no compiler optimization (-O0). And this behaviour always occurs using the latest 2 version gcc compiler (from 11.0 to 12.0). But using clang or msvc, everything works well. Thank you for your time. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c/111405] Problem with incorrect optimizion for "constexpr" function with possible overflow 2023-09-13 15:23 [Bug c/111405] New: Problem with incorrect optimizion for "constexpr" function with possible overflow 3180104919 at zju dot edu.cn @ 2023-09-13 15:27 ` pinskia at gcc dot gnu.org 2023-09-13 15:31 ` 3180104919 at zju dot edu.cn 2023-09-14 12:54 ` xry111 at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-09-13 15:27 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111405 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Signed integer overflow is undefined behavior. Use -fwrapv or unsigned to do the addition to get the behavior you want. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c/111405] Problem with incorrect optimizion for "constexpr" function with possible overflow 2023-09-13 15:23 [Bug c/111405] New: Problem with incorrect optimizion for "constexpr" function with possible overflow 3180104919 at zju dot edu.cn 2023-09-13 15:27 ` [Bug c/111405] " pinskia at gcc dot gnu.org @ 2023-09-13 15:31 ` 3180104919 at zju dot edu.cn 2023-09-14 12:54 ` xry111 at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: 3180104919 at zju dot edu.cn @ 2023-09-13 15:31 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111405 --- Comment #2 from Wang Chenyu <3180104919 at zju dot edu.cn> --- (In reply to Andrew Pinski from comment #1) > Signed integer overflow is undefined behavior. > > Use -fwrapv or unsigned to do the addition to get the behavior you want. I see.. Thank you for your explanation ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c/111405] Problem with incorrect optimizion for "constexpr" function with possible overflow 2023-09-13 15:23 [Bug c/111405] New: Problem with incorrect optimizion for "constexpr" function with possible overflow 3180104919 at zju dot edu.cn 2023-09-13 15:27 ` [Bug c/111405] " pinskia at gcc dot gnu.org 2023-09-13 15:31 ` 3180104919 at zju dot edu.cn @ 2023-09-14 12:54 ` xry111 at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: xry111 at gcc dot gnu.org @ 2023-09-14 12:54 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111405 Xi Ruoyao <xry111 at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |xry111 at gcc dot gnu.org --- Comment #3 from Xi Ruoyao <xry111 at gcc dot gnu.org> --- I'm really amazed that in 2023 there are still textbooks teaching everyone to invoke undefined behavior, even such a famous one. And how's this related to constexpr?! ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-09-14 12:54 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-09-13 15:23 [Bug c/111405] New: Problem with incorrect optimizion for "constexpr" function with possible overflow 3180104919 at zju dot edu.cn 2023-09-13 15:27 ` [Bug c/111405] " pinskia at gcc dot gnu.org 2023-09-13 15:31 ` 3180104919 at zju dot edu.cn 2023-09-14 12:54 ` xry111 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).