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

            Bug ID: 122088
           Summary: include/c++/13.2.0/variant:1383:43: internal compiler
                    error: Segmentation fault
           Product: gcc
           Version: 13.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: qingren2hxb at gmail dot com
  Target Milestone: ---

Input:
// { dg-options "-std=c++2a" }
#include <type_traits>
#include <variant>

template<typename T>
struct Foo {
  using __accepted_type = T;
};

template<typename T>
using Bar = std::variant<Foo<T>>;

template<typename... Args>
Bar(Args...) -> Bar<std::common_type_t<Args...>>;

int main() {
  Bar b{42};
  static_assert(std::is_same_v<decltype(b), Bar<int>>);
  return 0;
}

output:

$g++ -std=c++2a


test.cpp:14:9: error: expected ')' before '...' token
   14 | Bar(Args...) -> Bar<std::common_type_t<Args...>>;
      |    ~    ^~~
      |         )
In file included from 
test.cpp:3:
/workspace/installation/include/c++/13.2.0/variant: In substitution of
'template<class ... _Types> template<class _Tp, class> using
std::variant<_Types>::__accepted_type =
std::variant<_Types>::__to_type<__accepted_index<_Tp> > [with _Tp = _Tp&&;
<template-parameter-2-2> = typename std::enable_if<std::variant<Foo<T>
>::__not_self<_Tp&&>, void>::type; _Types = {Foo<T>}]':
test.cpp:17:11:   required from here
/workspace/installation/include/c++/13.2.0/variant:1383:43: internal compiler
error: Segmentation fault
 1383 |         using __accepted_type = __to_type<__accepted_index<_Tp>>;
      |                                           ^~~~~~~~~~~~~~~~~~~~
0x2301bba crash_signal
        /workspace/gcc/gcc/toplev.cc:314
0x12cc216 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:20461
0x12c7dd4 tsubst_expr(tree_node*, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:19906
0x127f90e tsubst_template_arg(tree_node*, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:12629
0x1287e2e tsubst_template_args(tree_node*, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:13777
0x1287ca5 tsubst_template_args(tree_node*, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:13759
0x12a50c5 tsubst(tree_node*, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:16347
0x12a1c20 tsubst(tree_node*, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:15977
0x129d489 tsubst_decl
        /workspace/gcc/gcc/cp/pt.cc:15318
0x12a1872 tsubst(tree_node*, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:15950
0x12dac45 instantiate_template(tree_node*, tree_node*, int)
        /workspace/gcc/gcc/cp/pt.cc:22143
0x12dbac4 instantiate_alias_template
        /workspace/gcc/gcc/cp/pt.cc:22226
0x12a1c58 tsubst(tree_node*, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:15978
0x127f8c3 tsubst_template_arg(tree_node*, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:12624
0x1311ab2 rewrite_tparm_list
        /workspace/gcc/gcc/cp/pt.cc:29772
0x1315d8a alias_ctad_tweaks
        /workspace/gcc/gcc/cp/pt.cc:30270
0x13179ab deduction_guides_for
        /workspace/gcc/gcc/cp/pt.cc:30505
0x13190c2 do_class_deduction
        /workspace/gcc/gcc/cp/pt.cc:30652
0x131b2e2 do_auto_deduction(tree_node*, tree_node*, tree_node*, int,
auto_deduction_context, tree_node*, int, tree_node*)
        /workspace/gcc/gcc/cp/pt.cc:30852
0xed30c1 cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int)
        /workspace/gcc/gcc/cp/decl.cc:8328
Please submit a full bug report, with preprocessed source.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Preprocessed source stored into /tmp/ccLP6Yor.out file, please attach this to
your bugreport.

=========
The compiler crashes with a segmentation fault.

Reply via email to