Commit fae2b46b by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/26691 (Wrong code for constructor with default value)

	PR c++/26691
	* cp-gimplify.c (cxx_omp_clause_apply_fn): Handle default arguments.

	* testsuite/libgomp.c++/pr26691.C: New test.

From-SVN: r112251
parent aa09f986
2006-03-21 Jakub Jelinek <jakub@redhat.com>
PR c++/26691
* cp-gimplify.c (cxx_omp_clause_apply_fn): Handle default arguments.
2006-03-21 Jason Merrill <jason@redhat.com> 2006-03-21 Jason Merrill <jason@redhat.com>
PR c++/21581 PR c++/21581
......
...@@ -712,9 +712,16 @@ cp_genericize (tree fndecl) ...@@ -712,9 +712,16 @@ cp_genericize (tree fndecl)
static tree static tree
cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2) cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2)
{ {
tree defparm, parm;
int i;
if (fn == NULL) if (fn == NULL)
return NULL; return NULL;
defparm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
if (arg2)
defparm = TREE_CHAIN (defparm);
if (TREE_CODE (TREE_TYPE (arg1)) == ARRAY_TYPE) if (TREE_CODE (TREE_TYPE (arg1)) == ARRAY_TYPE)
{ {
tree inner_type = TREE_TYPE (arg1); tree inner_type = TREE_TYPE (arg1);
...@@ -757,11 +764,16 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2) ...@@ -757,11 +764,16 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2)
t = build1 (LABEL_EXPR, void_type_node, lab); t = build1 (LABEL_EXPR, void_type_node, lab);
append_to_statement_list (t, &ret); append_to_statement_list (t, &ret);
t = NULL; t = tree_cons (NULL, p1, NULL);
if (arg2) if (arg2)
t = tree_cons (NULL, p2, t); t = tree_cons (NULL, p2, t);
t = tree_cons (NULL, p1, t); /* Handle default arguments. */
t = build_call (fn, t); i = 1 + (arg2 != NULL);
for (parm = defparm; parm != void_list_node; parm = TREE_CHAIN (parm))
t = tree_cons (NULL, convert_default_arg (TREE_VALUE (parm),
TREE_PURPOSE (parm),
fn, i++), t);
t = build_call (fn, nreverse (t));
append_to_statement_list (t, &ret); append_to_statement_list (t, &ret);
t = fold_convert (TREE_TYPE (p1), TYPE_SIZE_UNIT (inner_type)); t = fold_convert (TREE_TYPE (p1), TYPE_SIZE_UNIT (inner_type));
...@@ -785,11 +797,16 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2) ...@@ -785,11 +797,16 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2)
} }
else else
{ {
tree t = NULL; tree t = tree_cons (NULL, build_fold_addr_expr (arg1), NULL);
if (arg2) if (arg2)
t = tree_cons (NULL, build_fold_addr_expr (arg2), t); t = tree_cons (NULL, build_fold_addr_expr (arg2), t);
t = tree_cons (NULL, build_fold_addr_expr (arg1), t); /* Handle default arguments. */
return build_call (fn, t); i = 1 + (arg2 != NULL);
for (parm = defparm; parm != void_list_node; parm = TREE_CHAIN (parm))
t = tree_cons (NULL, convert_default_arg (TREE_VALUE (parm),
TREE_PURPOSE (parm),
fn, i++), t);
return build_call (fn, nreverse (t));
} }
} }
......
2006-03-21 Jakub Jelinek <jakub@redhat.com>
PR c++/26691
* testsuite/libgomp.c++/pr26691.C: New test.
2006-03-13 Jakub Jelinek <jakub@redhat.com> 2006-03-13 Jakub Jelinek <jakub@redhat.com>
* testsuite/libgomp.fortran/retval2.f90: New test. * testsuite/libgomp.fortran/retval2.f90: New test.
......
// PR c++/26691
struct A
{
int n;
A (int i = 3) : n (i) {}
};
int
main ()
{
A a;
int err = 0;
#pragma omp parallel private (a) reduction (+:err)
if (a.n != 3)
err++;
return err;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment