[Bug c++/84036] [8 Regression] ICE on valid code in C++14, variadic lambda capture in a template function

benni.buch at gmail dot com gcc-bugzilla@gcc.gnu.org
Fri Feb 2 22:03:00 GMT 2018


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

Benjamin Buch <benni.buch at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|FIXED                       |---

--- Comment #7 from Benjamin Buch <benni.buch at gmail dot com> ---
I have to reopen this with an extended test case. Its still an ICE as soon as I
access the captured pack:


template < typename T > void sink(T ...){}

template < typename T >
auto f(T){
    [](auto ... i){
        [i ...]{ sink(i ...); };
    };
}

int main(){
    f(0);
}


$ g++ -std=c++14 main2.cpp                                                      
main2.cpp: In instantiation of 'auto f(T) [with T = int]':
main2.cpp:11:5:   required from here
main2.cpp:6:16: internal compiler error: in retrieve_specialization, at
cp/pt.c:1191
   [i ...]{ sink(i ...); };
            ~~~~^~~~~~~
0x603f91 retrieve_specialization                                                
        ../../gcc/gcc/cp/pt.c:1188                                              
0x942e53 tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*)         
        ../../gcc/gcc/cp/pt.c:11524                                             
0x927dcd tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)                                                                           
        ../../gcc/gcc/cp/pt.c:17684                                             
0x934e29 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)                                                                           
        ../../gcc/gcc/cp/pt.c:17100                                             
0x934e29 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)             
        ../../gcc/gcc/cp/pt.c:16838
0x933950 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16059
0x931f41 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16322
0x932751 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16045
0x931f41 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16322
0x925b7b tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16030
0x925b7b tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*)
        ../../gcc/gcc/cp/pt.c:17056
0x927478 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/gcc/cp/pt.c:18346
0x934e29 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/gcc/cp/pt.c:17100
0x934e29 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16838
0x933950 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16059
0x932751 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16045
0x931f41 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16322
0x931f41 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16322
0x925b7b tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16030
0x925b7b tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*)
        ../../gcc/gcc/cp/pt.c:17056
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.


$ g++ --version
g++ (GCC) 8.0.1 20180202 (experimental)
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


More information about the Gcc-bugs mailing list