re PR c++/51884 ([C++11] ICE with local class/lambda template argument)
PR c++/51884 * class.c (modify_all_vtables): Mangle the vtable name before entering dfs_walk. From-SVN: r196551
This commit is contained in:
parent
37fb0a9878
commit
9d13a0695e
3 changed files with 39 additions and 0 deletions
|
@ -1,5 +1,9 @@
|
|||
2013-03-08 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/51884
|
||||
* class.c (modify_all_vtables): Mangle the vtable name before
|
||||
entering dfs_walk.
|
||||
|
||||
* semantics.c (lambda_expr_this_capture): In unevaluated context,
|
||||
just return the nearest 'this'.
|
||||
|
||||
|
|
|
@ -2541,6 +2541,10 @@ modify_all_vtables (tree t, tree virtuals)
|
|||
tree binfo = TYPE_BINFO (t);
|
||||
tree *fnsp;
|
||||
|
||||
/* Mangle the vtable name before entering dfs_walk (c++/51884). */
|
||||
if (TYPE_CONTAINS_VPTR_P (t))
|
||||
get_vtable_decl (t, false);
|
||||
|
||||
/* Update all of the vtables. */
|
||||
dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
|
||||
|
||||
|
|
31
gcc/testsuite/g++.dg/cpp0x/local-targ1.C
Normal file
31
gcc/testsuite/g++.dg/cpp0x/local-targ1.C
Normal file
|
@ -0,0 +1,31 @@
|
|||
// PR c++/51884
|
||||
// { dg-do compile { target c++11 } }
|
||||
// { dg-final { scan-assembler "_ZN1BIZN3fooIivE3barILb1EEEvvE1CEC1ERKS4_" } }
|
||||
|
||||
template<typename TT>
|
||||
struct test { static const int value = 0; };
|
||||
template<int I>
|
||||
struct enable_if { typedef void type; };
|
||||
|
||||
struct A { virtual void f() {} };
|
||||
template<typename U> struct B : A { B(); B(const B&); };
|
||||
template<typename U> B<U>::B() { }
|
||||
template<typename U> B<U>::B(const B&) { }
|
||||
|
||||
template<class T> void g(T) { }
|
||||
|
||||
template<typename T, typename = void> struct foo;
|
||||
template<typename T>
|
||||
struct foo<T,typename enable_if<test<T>::value>::type>
|
||||
{
|
||||
template <bool P> void bar() {
|
||||
struct C { } c;
|
||||
B<C> b;
|
||||
g(b);
|
||||
}
|
||||
};
|
||||
|
||||
int main() {
|
||||
foo<int> f;
|
||||
f.bar<true>();
|
||||
}
|
Loading…
Add table
Reference in a new issue