https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126154

            Bug ID: 126154
           Summary: [reflection] Internal compiler error with reflection
                    of static local object containing pointer-to-self
                    within template: in discriminator_for_local_entity, at
                    cp/mangle.cc:2337
           Product: gcc
           Version: 17.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: friedkeenan at protonmail dot com
  Target Milestone: ---

The erroring code:
```
#include <meta>

struct self_reference {
    const self_reference *self = this;
};

template<typename>
void function() {
    static constexpr auto SelfReferencing = self_reference{};

    constexpr auto _ = std::meta::reflect_constant(SelfReferencing);
}
```

Godbolt link: https://godbolt.org/z/chv8q7478

On current trunk, this results in the following error:
```
<source>: In function 'void function()':
<source>:11:51: internal compiler error: in discriminator_for_local_entity, at
cp/mangle.cc:2337
   11 |     constexpr auto _ = std::meta::reflect_constant(SelfReferencing);
      |                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
0x2b1b668 diagnostics::context::diagnostic_impl(rich_location*,
diagnostics::metadata const*, diagnostics::option_id, char const*,
__va_list_tag (*) [1], diagnostics::kind)
        ???:0
0x2b102ab internal_error(char const*, ...)
        ???:0
0xb394a0 fancy_abort(char const*, int, char const*)
        ???:0
0xca6be7 mangle_template_parm_object(tree_node*)
        ???:0
0xdc1c6c convert_reflect_constant_arg(tree_node*, tree_node*)
        ???:0
0xe174ec process_metafunction(constexpr_ctx const*, tree_node*, tree_node*,
bool*, bool*, tree_node**)
        ???:0
0xba6f27 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xb72307 build_new_function_call(tree_node*, vec<tree_node*, va_gc,
vl_embed>**, int)
        ???:0
0xe2f745 finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
        ???:0
0xd8d063 c_parse_file()
        ???:0
0xf1dc39 c_common_parse_file()
        ???:0
```

This code compiles successfully on 16.1.1. It also compiles successfully on
trunk if one changes `function` to not be a template function.

This issue would appear to me very similar to Bug 124824, though that is still
fixed in trunk for the code which caused that bug.
  • [Bug c++/126154] New: [refl... friedkeenan at protonmail dot com via Gcc-bugs

Reply via email to