https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101277
Bug ID: 101277 Summary: Assert in constructor generates code for statically checkable expression Product: gcc Version: 10.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: p.waydan at gmail dot com Target Milestone: --- Created attachment 51092 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=51092&action=edit -v output for Compiler Explorer compilation Given the following code segment compiled with C++14 and above: #include <cassert> struct Positive { constexpr Positive(int x) {assert(x >= 0);} }; int foo(Positive) {return 1;} int main() { return foo(Positive{1}); } GCC 10.1 and 10.2 will generate code to check if the assertion is true even though it is statically checkable. This occurs for optimization levels -O0, -Os, and -O2, but the assertion is elided for optimization levels -Og, -O1, and -O3. The assertion is always elided in GCC 9.4 and below as well as GCC 10.3 and above. Please see https://godbolt.org/z/3scPr1P7W for a comparison of x86-64 assembly with different GCC versions.