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)

Reply via email to