[Bug c++/51884] [C++11] ICE with local class/lambda template argument

2013-03-08 Thread jason at gcc dot gnu.org


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



--- Comment #8 from Jason Merrill jason at gcc dot gnu.org 2013-03-08 
16:03:57 UTC ---

Author: jason

Date: Fri Mar  8 16:03:48 2013

New Revision: 196549



URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=196549

Log:

PR c++/51494

PR c++/51884

PR c++/56222

* tree.c (maybe_dummy_object): Don't capture 'this'.

* semantics.c (maybe_resolve_dummy): New.

(finish_non_static_data_member): Use it.

(finish_qualified_id_expr): Don't test is_dummy_object.

* cp-tree.h: Declare maybe_resolve_dummy.

* call.c (build_new_method_call_1): Use it.



Added:

trunk/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this11.C

Modified:

trunk/gcc/cp/ChangeLog

trunk/gcc/cp/call.c

trunk/gcc/cp/cp-tree.h

trunk/gcc/cp/semantics.c

trunk/gcc/cp/tree.c


[Bug c++/51884] [C++11] ICE with local class/lambda template argument

2013-03-08 Thread jason at gcc dot gnu.org


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



--- Comment #9 from Jason Merrill jason at gcc dot gnu.org 2013-03-08 
16:04:30 UTC ---

Author: jason

Date: Fri Mar  8 16:04:15 2013

New Revision: 196551



URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=196551

Log:

PR c++/51884

* class.c (modify_all_vtables): Mangle the vtable name before

entering dfs_walk.



Added:

trunk/gcc/testsuite/g++.dg/cpp0x/local-targ1.C

Modified:

trunk/gcc/cp/ChangeLog

trunk/gcc/cp/class.c


[Bug c++/51884] [C++11] ICE with local class/lambda template argument

2013-03-08 Thread jason at gcc dot gnu.org


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



Jason Merrill jason at gcc dot gnu.org changed:



   What|Removed |Added



 Status|NEW |RESOLVED

 Resolution||FIXED

 AssignedTo|unassigned at gcc dot   |jason at gcc dot gnu.org

   |gnu.org |

   Target Milestone|--- |4.8.0



--- Comment #10 from Jason Merrill jason at gcc dot gnu.org 2013-03-08 
16:09:09 UTC ---

Fixed for 4.8.


[Bug c++/51884] [C++11] ICE with local class/lambda template argument

2013-03-06 Thread jason at gcc dot gnu.org


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



Jason Merrill jason at gcc dot gnu.org changed:



   What|Removed |Added



   Keywords||ice-on-valid-code

Summary|lambda with templates   |[C++11] ICE with local

   ||class/lambda template

   ||argument



--- Comment #7 from Jason Merrill jason at gcc dot gnu.org 2013-03-06 
14:09:01 UTC ---

And reduced again, as much as possible.  The ICE is caused by trying to

generate the partially-instantiated type of fooint::bar, and thereby looking

up testint::value, which uses the (non-reentrant) dfs functions, in order to

mangle the name of BC's vtable, which is also done using the dfs functions.



templatetypename

  struct test { static const int value = 0; };

templateint

  struct enable_if { typedef void type; };



struct A { virtual void f() {} };

templatetypename struct B : A { };



templatetypename, typename = void struct foo;

templatetypename T

struct fooT,typename enable_iftestT::value::type

{

  template bool void bar() const  {

struct C { } c;

BC b;

  }

};



int main() {

  fooint f;

  f.bartrue();

}