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
This commit is contained in:
parent
aa09f986bc
commit
fae2b46b09
4 changed files with 53 additions and 6 deletions
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
PR c++/21581
|
||||
|
|
|
@ -712,9 +712,16 @@ cp_genericize (tree fndecl)
|
|||
static tree
|
||||
cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2)
|
||||
{
|
||||
tree defparm, parm;
|
||||
int i;
|
||||
|
||||
if (fn == 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)
|
||||
{
|
||||
tree inner_type = TREE_TYPE (arg1);
|
||||
|
@ -757,11 +764,16 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2)
|
|||
t = build1 (LABEL_EXPR, void_type_node, lab);
|
||||
append_to_statement_list (t, &ret);
|
||||
|
||||
t = NULL;
|
||||
t = tree_cons (NULL, p1, NULL);
|
||||
if (arg2)
|
||||
t = tree_cons (NULL, p2, t);
|
||||
t = tree_cons (NULL, p1, t);
|
||||
t = build_call (fn, t);
|
||||
/* Handle default arguments. */
|
||||
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);
|
||||
|
||||
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)
|
|||
}
|
||||
else
|
||||
{
|
||||
tree t = NULL;
|
||||
tree t = tree_cons (NULL, build_fold_addr_expr (arg1), NULL);
|
||||
if (arg2)
|
||||
t = tree_cons (NULL, build_fold_addr_expr (arg2), t);
|
||||
t = tree_cons (NULL, build_fold_addr_expr (arg1), t);
|
||||
return build_call (fn, t);
|
||||
/* Handle default arguments. */
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
* testsuite/libgomp.fortran/retval2.f90: New test.
|
||||
|
|
20
libgomp/testsuite/libgomp.c++/pr26691.C
Normal file
20
libgomp/testsuite/libgomp.c++/pr26691.C
Normal file
|
@ -0,0 +1,20 @@
|
|||
// 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;
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue