From 749db154bd0d496379afca19ef72c3e121a034bb Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 27 Dec 2008 16:24:52 +0100 Subject: [PATCH] re PR c++/38639 (ICE with invalid use of auto in parallel for-loop) PR c++/38639 * pt.c (tsubst_omp_for_iterator): RECUR on whole init_expr instead of just its type. * g++.dg/gomp/pr38639.C: New test. From-SVN: r142933 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 5 +---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/gomp/pr38639.C | 17 +++++++++++++++++ 4 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/gomp/pr38639.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 94e1a7cd2c1..2771f7e85ba 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-12-27 Jakub Jelinek + + PR c++/38639 + * pt.c (tsubst_omp_for_iterator): RECUR on whole init_expr instead of + just its type. + 2008-12-21 Jason Merrill PR c++/38597 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index db81942eb00..786e8456b99 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -10334,14 +10334,11 @@ tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv, if (auto_node && init) { tree init_expr = init; - tree orig_type; if (TREE_CODE (init_expr) == DECL_EXPR) init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr)); - orig_type = TREE_TYPE (init_expr); - TREE_TYPE (init_expr) = RECUR (TREE_TYPE (init_expr)); + init_expr = RECUR (init_expr); TREE_TYPE (decl) = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node); - TREE_TYPE (init_expr) = orig_type; } gcc_assert (!type_dependent_expression_p (decl)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4afbc8cc5bf..fb334fb2559 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-12-27 Jakub Jelinek + + PR c++/38639 + * g++.dg/gomp/pr38639.C: New test. + 2008-12-23 Andrew Pinski PR middle-end/38590 diff --git a/gcc/testsuite/g++.dg/gomp/pr38639.C b/gcc/testsuite/g++.dg/gomp/pr38639.C new file mode 100644 index 00000000000..1da3cecdf07 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr38639.C @@ -0,0 +1,17 @@ +// PR c++/38639 +// { dg-do compile } +// { dg-options "-fopenmp -std=c++0x" } + +template void +foo () +{ +#pragma omp parallel for + for (auto i = i = 0; i<4; ++i) // { dg-error "incomplete|unable|invalid" } + ; +} + +void +bar () +{ + foo<0> (); // { dg-message "instantiated from here" } +}