mirror of git://gcc.gnu.org/git/gcc.git
re PR c++/53565 (FAIL: libgomp.c++/for-7.C)
PR c++/53565 * pt.c (tsubst_omp_for_iterator): Simplify DECL_EXPR handling. (tsubst_expr) [OMP_FOR]: Here, too. From-SVN: r188939
This commit is contained in:
parent
85d917484f
commit
443679ae80
|
|
@ -1,3 +1,9 @@
|
|||
2012-06-25 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/53565
|
||||
* pt.c (tsubst_omp_for_iterator): Simplify DECL_EXPR handling.
|
||||
(tsubst_expr) [OMP_FOR]: Here, too.
|
||||
|
||||
2012-06-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/53594
|
||||
|
|
|
|||
49
gcc/cp/pt.c
49
gcc/cp/pt.c
|
|
@ -12659,22 +12659,24 @@ tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
|
|||
#define RECUR(NODE) \
|
||||
tsubst_expr ((NODE), args, complain, in_decl, \
|
||||
integral_constant_expression_p)
|
||||
tree decl, init, cond, incr, auto_node;
|
||||
tree decl, init, cond, incr;
|
||||
bool init_decl;
|
||||
|
||||
init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
|
||||
gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
|
||||
decl = RECUR (TREE_OPERAND (init, 0));
|
||||
decl = TREE_OPERAND (init, 0);
|
||||
init = TREE_OPERAND (init, 1);
|
||||
auto_node = type_uses_auto (TREE_TYPE (decl));
|
||||
if (auto_node && init)
|
||||
/* Do this before substituting into decl to handle 'auto'. */
|
||||
init_decl = (init && TREE_CODE (init) == DECL_EXPR);
|
||||
init = RECUR (init);
|
||||
decl = RECUR (decl);
|
||||
if (init_decl)
|
||||
{
|
||||
tree init_expr = init;
|
||||
if (TREE_CODE (init_expr) == DECL_EXPR)
|
||||
init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
|
||||
init_expr = RECUR (init_expr);
|
||||
TREE_TYPE (decl)
|
||||
= do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
|
||||
gcc_assert (!processing_template_decl);
|
||||
init = DECL_INITIAL (decl);
|
||||
DECL_INITIAL (decl) = NULL_TREE;
|
||||
}
|
||||
|
||||
gcc_assert (!type_dependent_expression_p (decl));
|
||||
|
||||
if (!CLASS_TYPE_P (TREE_TYPE (decl)))
|
||||
|
|
@ -12695,7 +12697,7 @@ tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
|
|||
return;
|
||||
}
|
||||
|
||||
if (init && TREE_CODE (init) != DECL_EXPR)
|
||||
if (init && !init_decl)
|
||||
{
|
||||
tree c;
|
||||
for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
|
||||
|
|
@ -13189,34 +13191,13 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
|
|||
condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
|
||||
incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
|
||||
|
||||
stmt = begin_omp_structured_block ();
|
||||
|
||||
for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
|
||||
tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
|
||||
&clauses, args, complain, in_decl,
|
||||
integral_constant_expression_p);
|
||||
|
||||
stmt = begin_omp_structured_block ();
|
||||
|
||||
for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
|
||||
if (TREE_VEC_ELT (initv, i) == NULL
|
||||
|| TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
|
||||
TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
|
||||
else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
|
||||
{
|
||||
tree init = RECUR (TREE_VEC_ELT (initv, i));
|
||||
gcc_assert (init == TREE_VEC_ELT (declv, i));
|
||||
TREE_VEC_ELT (initv, i) = NULL_TREE;
|
||||
}
|
||||
else
|
||||
{
|
||||
tree decl_expr = TREE_VEC_ELT (initv, i);
|
||||
tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
|
||||
gcc_assert (init != NULL);
|
||||
TREE_VEC_ELT (initv, i) = RECUR (init);
|
||||
DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
|
||||
RECUR (decl_expr);
|
||||
DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
|
||||
}
|
||||
|
||||
pre_body = push_stmt_list ();
|
||||
RECUR (OMP_FOR_PRE_BODY (t));
|
||||
pre_body = pop_stmt_list (pre_body);
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@ template <typename T>
|
|||
void
|
||||
f3 (void)
|
||||
{
|
||||
#pragma omp for // { dg-error "forbids incrementing a pointer of type" }
|
||||
for (T q = T (p); q < T (p + 4); q++)
|
||||
#pragma omp for
|
||||
for (T q = T (p); q < T (p + 4); q++) // { dg-error "forbids incrementing a pointer of type" }
|
||||
;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue