diff options
author | Jason Merrill <jason@redhat.com> | 2014-06-30 14:51:29 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2014-06-30 14:51:29 -0400 |
commit | cae7c96095c645003b25e1b69bee46ade7fce344 (patch) | |
tree | 0afc62b27294c1b4d7e94bac36e99f94358d3499 | |
parent | 1d7e2ec760cc5512747ab054765eca101fc49dc6 (diff) | |
download | gcc-cae7c96095c645003b25e1b69bee46ade7fce344.zip gcc-cae7c96095c645003b25e1b69bee46ade7fce344.tar.gz gcc-cae7c96095c645003b25e1b69bee46ade7fce344.tar.bz2 |
re PR c++/61566 (ICE in write_unscoped_name)
PR c++/61566
* mangle.c (decl_mangling_context): Look through a TEMPLATE_DECL.
From-SVN: r212165
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C | 20 |
3 files changed, 27 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e925e13..122cf8a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2014-06-30 Jason Merrill <jason@redhat.com> + PR c++/61566 + * mangle.c (decl_mangling_context): Look through a TEMPLATE_DECL. + * decl.c (build_ptrmemfunc_type): Don't give a PMF RECORD_TYPE TYPE_BINFO or TYPE_LANG_SPECIFIC. * cp-tree.h (TYPE_PTRMEMFUNC_FLAG): Use TYPE_LANG_FLAG_2. diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index ac1c1da..02c05d4 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -742,6 +742,10 @@ decl_mangling_context (tree decl) if (tcontext != NULL_TREE) return tcontext; + if (TREE_CODE (decl) == TEMPLATE_DECL + && DECL_TEMPLATE_RESULT (decl)) + decl = DECL_TEMPLATE_RESULT (decl); + if (TREE_CODE (decl) == TYPE_DECL && LAMBDA_TYPE_P (TREE_TYPE (decl))) { diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C new file mode 100644 index 0000000..adbb4db --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C @@ -0,0 +1,20 @@ +// PR c++/61566 +// { dg-do compile { target c++11 } } + +struct function +{ + template < typename _Functor> + function (_Functor); +}; + +struct C +{ + template <typename T> + void foo (T, function = [] {}); +}; + +void bar () +{ + C c; + c.foo (1); +} |