From dcdb8613c25cee5ec5841aca65ee6a20cc8d9a02 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 21 Jan 2013 20:27:19 -0500 Subject: [PATCH] re PR c++/56059 (SIGSEGV on invalid C++11 code) PR c++/56059 * tree.c (strip_typedefs_expr) [TREE_VEC]: Preserve non-default template args count. From-SVN: r195355 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/tree.c | 2 ++ gcc/testsuite/g++.dg/cpp0x/decltype48.C | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/decltype48.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6370f7f..162420b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-01-21 Jason Merrill + + PR c++/56059 + * tree.c (strip_typedefs_expr) [TREE_VEC]: Preserve non-default + template args count. + 2013-01-18 Jason Merrill PR target/54908 diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 2b108c1..d1f14fc 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1351,6 +1351,8 @@ strip_typedefs_expr (tree t) r = copy_node (t); for (i = 0; i < n; ++i) TREE_VEC_ELT (r, i) = (*vec)[i]; + SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT + (r, GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t)); } else r = t; diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype48.C b/gcc/testsuite/g++.dg/cpp0x/decltype48.C new file mode 100644 index 0000000..29ce815 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype48.C @@ -0,0 +1,16 @@ +// PR c++/56059 +// { dg-options -std=c++11 } + +typedef int Int; +template struct baz { }; +template T bar(); + +template +baz(bar() ...))> // { dg-error "no match" } +foo(); + +int main() +{ + foo(); // { dg-error "no match" } + return 0; +} -- 2.7.4