mirror of git://gcc.gnu.org/git/gcc.git
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
|
|
@ -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>
|
2006-03-21 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
PR c++/21581
|
PR c++/21581
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
2006-03-13 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* testsuite/libgomp.fortran/retval2.f90: New test.
|
* testsuite/libgomp.fortran/retval2.f90: New test.
|
||||||
|
|
|
||||||
|
|
@ -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…
Reference in New Issue