https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104426
Bug ID: 104426 Summary: -fsanitize=undefined causes constexpr failures Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: pdimov at gmail dot com Target Milestone: --- The following program ``` struct category { constexpr bool failed() const noexcept { return true; } }; inline constexpr category s_cat; struct condition { category const* cat_; constexpr bool failed() const noexcept { if( cat_ ) { return cat_->failed(); } else { return false; } } }; int main() { constexpr condition cond{ &s_cat }; static_assert( cond.failed() ); } ``` compiles without -fsanitize=undefined (https://godbolt.org/z/Pn9M5ocfz), but fails with it (https://godbolt.org/z/KKc8Tb9qe) with ``` <source>: In function 'int main()': <source>:31:31: error: non-constant condition for static assertion 31 | static_assert( cond.failed() ); | ~~~~~~~~~~~^~ <source>:31:31: in 'constexpr' expansion of 'cond.condition::failed()' <source>:17:13: error: '((& s_cat) != 0)' is not a constant expression 17 | if( cat_ ) | ^~~~ ``` This happens under all GCC versions starting from 7. (The above is an extract from the test suite for boost::system::error_condition.)