https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105996
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|reinterpret_cast in |[12/11/12/13 Regression] |constexpr failure creating |reinterpret_cast in |a pair with a function |constexpr failure creating |pointer of class parent |a pair with a function | |pointer of class parent Last reconfirmed| |2022-06-16 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 Known to fail| |10.3.0, 11.3.0, 12.1.0, | |13.0, 8.1.0 CC| |jakub at gcc dot gnu.org Known to work| |7.5.0 --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced: template<typename T, typename U> constexpr int make_pair(T&&, U&&) { return 0; } struct A { void CB() {} }; struct B : public A { void Test() { using MyCB = void (B::*)(); static constexpr auto p = make_pair<int, MyCB>(1, &B::CB); } }; 105996.C: In member function 'void B::Test()': 105996.C:10:53: error: a reinterpret_cast is not a constant expression static constexpr auto p = make_pair<int, MyCB>(1, &B::CB); ^~ Started to fail some time before r256448, probably commit e99ef40892b598eeb3fa496cc472e111675d7f6c Author: Jakub Jelinek Date: Wed Jan 10 16:59:09 2018 re PR c++/81327 (cast to void* does not suppress -Wclass-memaccess) PR c++/81327 * call.c (maybe_warn_class_memaccess): Add forward declaration. Change last argument from tree * to const vec<tree, va_gc> *, adjust args uses and check number of operands too. Don't strip away any nops. Use maybe_constant_value when looking for INTEGER_CST args. Deal with src argument not having pointer type. Check tree_fits_uhwi_p before calling tree_to_uhwi. Remove useless test. (build_over_call): Call maybe_warn_class_memaccess here on the original arguments. (build_cxx_call): Rather than here on converted arguments. * g++.dg/Wclass-memaccess-2.C: Don't expect a warning when explicitly cast to void *. From-SVN: r256440