http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53137



valery.bickov+gcc at gmail dot com changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Status|RESOLVED                    |REOPENED

         Resolution|FIXED                       |



--- Comment #8 from Jason Merrill <jason at gcc dot gnu.org> 2012-06-20 
07:22:00 UTC ---

Author: jason

Date: Wed Jun 20 07:21:55 2012

New Revision: 188810



URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=188810

Log:

    Reapply:

    PR c++/53137

    * pt.c (instantiate_class_template_1): Set LAMBDA_EXPR_THIS_CAPTURE.

    (instantiate_decl): Don't push_to_top_level for local class methods.

    (instantiate_class_template_1): Or for local classes.



Added:

   

branches/gcc-4_7-branch/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template5.C

Modified:

    branches/gcc-4_7-branch/gcc/cp/ChangeLog

    branches/gcc-4_7-branch/gcc/cp/pt.c

    branches/gcc-4_7-branch/gcc/testsuite/ChangeLog



--- Comment #9 from valery.bickov+gcc at gmail dot com 2012-09-26 11:12:24 UTC 
---

Slightly modified example still crashes on 4.7.2:



template <typename STORE>

void getParent(STORE& tStore)

{

}



struct  Store

{

    template <typename CheckParentFunc>

    void updateChildCommon(CheckParentFunc c)

    {

        c();

    }



    template <typename T>

    int& getStore();



    template <typename T>

    void updateChild(const T& obj)

    {

        updateChildCommon([this] () { getParent(getStore<T>()); });

    }



    void update(int obj);

};



void Store::update(int obj)

{

    updateChild(obj);

}



$ /usr/local/gcc-4.7.2/bin/g++ -c gcc-4.7.2-crash.cpp -std=c++11

gcc-4.7.2-crash.cpp: In lambda function:

gcc-4.7.2-crash.cpp:29:1: internal compiler error: in get_expr_operands, at

tree-ssa-operands.c:1035

Please submit a full bug report,

with preprocessed source if appropriate.

See <http://gcc.gnu.org/bugs.html> for instructions.



$ /usr/local/gcc-4.7.2/bin/g++ -v

Using built-in specs.

COLLECT_GCC=/usr/local/gcc-4.7.2/bin/g++

COLLECT_LTO_WRAPPER=/usr/local/gcc-4.7.2/libexec/gcc/x86_64-unknown-linux-gnu/4.7.2/lto-wrapper

Target: x86_64-unknown-linux-gnu

Configured with: ./configure --prefix=/usr/local/gcc-4.7.2 --enable-lto

--disable-multilib --enable-languages=c,c++

Thread model: posix

gcc version 4.7.2 (GCC) 



It compiles ok if I remove c() call or move update(int) definition body into

class.



g++-4.6.3 works with it.



I changed status to reopened excuse me if I shouldn't do it.

Reply via email to