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

            Bug ID: 88385
           Summary: [9 regression] ICE in tsubst_pack_expansion
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: s...@li-snyder.org
  Target Milestone: ---

hi -

gcc 20181205 gets an ICE compiling this code. (8.2.1 compiles it without
error.)
thanks,
sss

--------------------------------------------------------------
template <class X1, class X2>
struct xtest
{
  static const bool value = true;
};

template<typename... Ts>
struct compressed_tuple_
{
  template<typename... Args>
  constexpr compressed_tuple_(Args &&... args)
    noexcept(xtest<xtest<Ts, Args>... >::value)
    ;
};


struct adaptor_cursor_t : public compressed_tuple_<int, int>
{
  using compressed_tuple_<int, int>::compressed_tuple_;
};


struct tadap
{
  static constexpr adaptor_cursor_t begin_cursor_()
    noexcept(noexcept(adaptor_cursor_t{ 41, 42  }))    ;
};
----------------------------------------------------------------------
$ ~/gcc/build/gcc/cc1plus -quiet  -D_GNU_SOURCE x.cc -std=c++17 -version -o x.s
GNU C++17 (GCC) version 9.0.0 20181205 (experimental) (x86_64-pc-linux-gnu)
        compiled by GNU C version 9.0.0 20181205 (experimental), GMP version
6.1.2, MPFR version 3.1.6-p2, MPC version 1.0.2, isl version isl-0.16.1-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++17 (GCC) version 9.0.0 20181205 (experimental) (x86_64-pc-linux-gnu)
        compiled by GNU C version 9.0.0 20181205 (experimental), GMP version
6.1.2, MPFR version 3.1.6-p2, MPC version 1.0.2, isl version isl-0.16.1-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: f55eeb31a29ad4100f3c306670176e86
x.cc: In instantiation of ‘constexpr adaptor_cursor_t::adaptor_cursor_t(Args&&
...) [with Args = {int, int}][inherited from compressed_tuple_<int, int>]’:
x.cc:17:8:   required from ‘constexpr adaptor_cursor_t::adaptor_cursor_t(Args&&
...) [with Args = {int, int}][inherited from compressed_tuple_<int, int>]’
x.cc:26:50:   required from here
x.cc:17:8: internal compiler error: in tsubst_pack_expansion, at cp/pt.c:12213
   17 | struct adaptor_cursor_t : public compressed_tuple_<int, int>
      |        ^~~~~~~~~~~~~~~~
0x6ed024 tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*)
        /home/sss/gcc/gcc/gcc/cp/pt.c:12213
0x6ed905 tsubst_template_args
        /home/sss/gcc/gcc/gcc/cp/pt.c:12446
0x6ee1c1 tsubst_aggr_type
        /home/sss/gcc/gcc/gcc/cp/pt.c:12672
0x6f2c0d tsubst(tree_node*, tree_node*, int, tree_node*)
        /home/sss/gcc/gcc/gcc/cp/pt.c:14324
0x6f4e31 tsubst_qualified_id
        /home/sss/gcc/gcc/gcc/cp/pt.c:15215
0x6fec27 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        /home/sss/gcc/gcc/gcc/cp/pt.c:18357
0x70c954 maybe_instantiate_noexcept(tree_node*, int)
        /home/sss/gcc/gcc/gcc/cp/pt.c:24007
0x64051c start_preparsed_function(tree_node*, tree_node*, int)
        /home/sss/gcc/gcc/gcc/cp/decl.c:15454
0x686818 synthesize_method(tree_node*)
        /home/sss/gcc/gcc/gcc/cp/method.c:914
0x70da8c instantiate_decl(tree_node*, bool, bool)
        /home/sss/gcc/gcc/gcc/cp/pt.c:24408
0x61735b instantiate_cx_fn_r
        /home/sss/gcc/gcc/gcc/cp/constexpr.c:4953
0xde35c8 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node*
(*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*,
hash_set<tree_node*, default_hash_traits<tree_node*> >*))
        /home/sss/gcc/gcc/gcc/tree.c:11924
0xde38dc walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node*
(*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*,
hash_set<tree_node*, default_hash_traits<tree_node*> >*))
        /home/sss/gcc/gcc/gcc/tree.c:12246
0xde3250 walk_tree_without_duplicates_1(tree_node**, tree_node*
(*)(tree_node**, int*, void*), void*, tree_node* (*)(tree_node**, int*,
tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*,
default_hash_traits<tree_node*> >*))
        /home/sss/gcc/gcc/gcc/tree.c:12272
0x61ea2e instantiate_constexpr_fns
        /home/sss/gcc/gcc/gcc/cp/constexpr.c:4972
0x61ea2e is_sub_constant_expr(tree_node*)
        /home/sss/gcc/gcc/gcc/cp/constexpr.c:5140
0x668a27 check_noexcept_r
        /home/sss/gcc/gcc/gcc/cp/except.c:1041
0xde35c8 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node*
(*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*,
hash_set<tree_node*, default_hash_traits<tree_node*> >*))
        /home/sss/gcc/gcc/gcc/tree.c:11924
0xde3a46 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node*
(*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*,
hash_set<tree_node*, default_hash_traits<tree_node*> >*))
        /home/sss/gcc/gcc/gcc/tree.c:12156
0xde3250 walk_tree_without_duplicates_1(tree_node**, tree_node*
(*)(tree_node**, int*, void*), void*, tree_node* (*)(tree_node**, int*,
tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*,
default_hash_traits<tree_node*> >*))
        /home/sss/gcc/gcc/gcc/tree.c:12272
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.


-------------------------------------------------------------------------
Abort comes from this line in tsubst_pack_expansion:

          /* We can't substitute for this parameter pack.  We use a flag as
             well as the missing_level counter because function parameter
             packs don't have a level.  */
          gcc_assert (processing_template_decl || is_auto (parm_pack));

Reply via email to