https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125649
Bug ID: 125649
Summary: ICE with reflect_constant on pointer returned by
std::allocator::allocate
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: programmer00001h at gmail dot com
Target Milestone: ---
Problematic source code (preprocessed version attached):
#include<memory>
#include<meta>
consteval{
const int* m = std::allocator<int>().allocate(1);
std::meta::reflect_constant(m);
}
compile command: g++ -std=c++26 -freflection ice.cpp
I could not reproduce this crash on my system gcc (16.1.1 20260430), which just
gives
error: uncaught exception of type ‘std::meta::exception’; ‘what()’:
‘reflect_constant failed’
so I think this may be a 17 regression.
Backtrace:
<source>:6:1: in 'constexpr' expansion of '<lambda()> static()'
6 | }
| ^
<source>:5:32: internal compiler error: in invalid_tparm_referent_p, at
cp/pt.cc:7500
5 | std::meta::reflect_constant(m);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
0x29f4c28 diagnostics::context::diagnostic_impl(rich_location*,
diagnostics::metadata const*, diagnostics::option_id, char const*,
__va_list_tag (*) [1], diagnostics::kind)
???:0
0x29e986b internal_error(char const*, ...)
???:0
0xb33dde fancy_abort(char const*, int, char const*)
???:0
0xdbc53c convert_reflect_constant_arg(tree_node*, tree_node*)
???:0
0xe11cdc process_metafunction(constexpr_ctx const*, tree_node*, tree_node*,
bool*, bool*, tree_node**)
???:0
0xba183c cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
???:0
0xba0e7a cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
???:0
0xba1a6d cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
???:0
0xba15b6 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
???:0
0xba21d3 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
???:0
0xba12c0 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
???:0
0xba12c0 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
???:0
0xba183c cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
???:0
0xba112f cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
???:0
0xbb3863 cxx_constant_value(tree_node*, tree_node*, int)
???:0
0xe3310e finish_static_assert(tree_node*, tree_node*, unsigned long, bool,
bool, bool)
???:0
0xd87813 c_parse_file()
???:0
0xf173d9 c_common_parse_file()
???:0
Output of gcc -v:
Using built-in specs.
COLLECT_GCC=/opt/compiler-explorer/gcc-snapshot/bin/g++
Target: x86_64-linux-gnu
Configured with: ../gcc-trunk-20260607/configure
--prefix=/opt/compiler-explorer/gcc-build/staging --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu --disable-bootstrap
--enable-multiarch --with-abi=m64 --with-multilib-list=m32,m64,mx32
--enable-multilib --enable-clocale=gnu
--enable-languages=c,c++,fortran,ada,objc,obj-c++,go,d,rust,m2,cobol,algol68
--enable-ld=yes --enable-gold=yes --enable-libstdcxx-time=yes
--enable-linker-build-id --enable-lto --enable-plugins --enable-threads=posix
--with-pkgversion=Compiler-Explorer-Build-gcc-68d3f1e2c20efe07f99de3720d1732c4b987ff22-binutils-2.44
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 17.0.0 20260604 (experimental)
(Compiler-Explorer-Build-gcc-68d3f1e2c20efe07f99de3720d1732c4b987ff22-binutils-2.44)