From 761f8e2f8add70caf57b07c37b84059117031451 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Tue, 8 Sep 2015 15:02:01 +0000 Subject: [PATCH] re PR c++/67369 (ICE (in tsubst_decl, at cp/pt.c:11302) with -std=c++14) /cp 2015-09-08 Paolo Carlini PR c++/67369 * pt.c (tsubst_copy, [case FUNCTION_DECL]): Do not call tsubst if the first argument isn't a template. /testsuite 2015-09-08 Paolo Carlini PR c++/67369 * g++.dg/cpp1y/lambda-generic-ice4.C: New. From-SVN: r227530 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 5 +++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice4.C | 10 ++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f8185070ebb..6115fd19f03 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2015-09-08 Paolo Carlini + + PR c++/67369 + * pt.c (tsubst_copy, [case FUNCTION_DECL]): Do not call tsubst + if the first argument isn't a template. + 2015-09-03 Martin Sebor PR c/66516 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index ec32c5a0542..2544751cb42 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -13599,8 +13599,9 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl) if (r) { /* Make sure that the one we found is the one we want. */ - tree ctx = tsubst (DECL_CONTEXT (t), args, - complain, in_decl); + tree ctx = DECL_CONTEXT (t); + if (DECL_LANG_SPECIFIC (ctx) && DECL_TEMPLATE_INFO (ctx)) + ctx = tsubst (ctx, args, complain, in_decl); if (ctx != DECL_CONTEXT (r)) r = NULL_TREE; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5fece2fc090..e75dec7813f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-09-08 Paolo Carlini + + PR c++/67369 + * g++.dg/cpp1y/lambda-generic-ice4.C: New. + 2015-09-07 Marek Polacek PR inline-asm/67448 diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice4.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice4.C new file mode 100644 index 00000000000..ec4db83b6e4 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice4.C @@ -0,0 +1,10 @@ +// PR c++/67369 +// { dg-do compile { target c++14 } } + +int main() { + unsigned const nsz = 0; + auto repeat_conditional = [&](auto) { + auto new_sz = nsz; + }; + repeat_conditional(1); +} -- 2.30.2