[Bug c++/126699] New: invalid constexpr causes internal compiler error: in build_data_member_initialization, at cp/constexpr.cc:462

"lu.maltsis at postgrad dot manchester.ac.uk via Gcc-bugs" <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126699

            Bug ID: 126699
           Summary: invalid constexpr causes internal compiler error: in
                    build_data_member_initialization, at
                    cp/constexpr.cc:462
           Product: gcc
           Version: 17.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lu.maltsis at postgrad dot manchester.ac.uk
  Target Milestone: ---

<source>: In constructor 'constexpr base<<anonymous> >::base(int)':
<source>:9:11: warning: division by zero [-Wdiv-by-zero]
    9 |   { y = 1 / 0; }
      |         ~~^~~
<source>: In function 'int main()':
<source>:21:26:   in 'constexpr' expansion of '((foo*)(& bar1))->foo::foo(1,
2)'
   21 |   constexpr foo bar1{1, 2};
      |                          ^
<source>:16:38:   in 'constexpr' expansion of '((foo*)this)->foo::foo(a)'
   16 |   constexpr foo(int a, int b) : foo{a}{}
      |                                      ^
<source>:15:35: error: 'constexpr base<<anonymous> >::base(int) [with int
<anonymous> = 2]' called in a constant expression
   15 |   constexpr foo(int a) : base<2>{a}{}
      |                                   ^
<source>:8:13: note: 'constexpr base<<anonymous> >::base(int) [with int
<anonymous> = 2]' is not usable as a 'constexpr' function because:
    8 |   constexpr base(int a) : base{}
      |             ^~~~
<source>:8:13: internal compiler error: in build_data_member_initialization, at
cp/constexpr.cc:462
0x2b8ff08 diagnostics::context::diagnostic_impl(rich_location*,
diagnostics::metadata const*, diagnostics::option_id, char const*,
__va_list_tag (*) [1], diagnostics::kind)
        ???:0
0x2b84b4b internal_error(char const*, ...)
        ???:0
0xb3f80c fancy_abort(char const*, int, char const*)
        ???:0
0xbc5f6a explain_invalid_constexpr_fn(tree_node*)
        ???:0
0xbad5d1 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xbad752 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xbad448 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xbad9fd cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xbad188 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xbad5d1 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xbad752 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xbad448 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xbad188 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xbad5d1 cxx_eval_constant_expression(constexpr_ctx const*, tree_node*,
value_cat, bool*, bool*, tree_node**)
        ???:0
0xea58ee store_init_value(tree_node*, tree_node*, vec<tree_node*, va_gc,
vl_embed>**, int)
        ???:0
0xc51616 cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int,
cp_decomp*)
        ???:0
0xd94eb3 c_parse_file()
        ???:0
0xf28289 c_common_parse_file()
        ???:0
/cefs/71/7162170c670fadfdb1a6fa5f_gcc-trunk-20260806/bin/../libexec/gcc/x86_64-linux-gnu/17.0.0/cc1plus
-quiet -imultiarch x86_64-linux-gnu -iprefix
/cefs/71/7162170c670fadfdb1a6fa5f_gcc-trunk-20260806/bin/../lib/gcc/x86_64-linux-gnu/17.0.0/
-D_GNU_SOURCE <source> -quiet -dumpdir /app/ -dumpbase output.cpp -dumpbase-ext
.cpp -masm=intel -mtune=generic -march=x86-64 -g -fdiagnostics-color=always
-fno-verbose-asm -o /app/output.s
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Compiler returned: 1

Code:

template<int>
struct base
{
  int y{};

  base() = default;

  constexpr base(int a) : base{}
  { y = 1 / 0; }
};

struct foo : base<1>, base<2>
{
  int x{};
  constexpr foo(int a) : base<2>{a}{}
  constexpr foo(int a, int b) : foo{a}{}
};

int main()
{
  constexpr foo bar1{1, 2};
}


https://godbolt.org/z/6YEKj6zba

Commit Hash: 56d98177f592e0cf8b3118c4859b416658e0be3a
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.