re PR middle-end/47281 (error: non-trivial conversion at assignment)

2011-01-14  Richard Guenther  <rguenther@suse.de>

	PR middle-end/47281
	Revert
	2011-01-11  Richard Guenther  <rguenther@suse.de>

        PR tree-optimization/46076
        * tree-ssa.c (useless_type_conversion_p): Conversions from
        unprototyped to empty argument list function types are useless.

	* gcc.dg/torture/pr47281.c: New testcase.
	* gcc.dg/tree-ssa/pr46076.c: XFAIL.

From-SVN: r168781
This commit is contained in:
Richard Guenther 2011-01-14 12:39:09 +00:00 committed by Richard Biener
parent 6c0c92e6b3
commit 8f66db3b32
5 changed files with 40 additions and 6 deletions

View File

@ -1,3 +1,13 @@
2011-01-14 Richard Guenther <rguenther@suse.de>
PR middle-end/47281
Revert
2011-01-11 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46076
* tree-ssa.c (useless_type_conversion_p): Conversions from
unprototyped to empty argument list function types are useless.
2011-01-14 Richard Guenther <rguenther@suse.de>
PR tree-optimization/47286

View File

@ -1,3 +1,9 @@
2011-01-14 Richard Guenther <rguenther@suse.de>
PR middle-end/47281
* gcc.dg/torture/pr47281.c: New testcase.
* gcc.dg/tree-ssa/pr46076.c: XFAIL.
2011-01-14 Richard Guenther <rguenther@suse.de>
PR tree-optimization/47286

View File

@ -0,0 +1,23 @@
/* { dg-do compile } */
struct T;
typedef void F(void);
F* aux(void (*x)())
{
return x;
}
void make_mess (int);
F*
get_funloc (void (*x)(int), F* (*y)())
{
return y(x);
}
F*
foo ()
{
return get_funloc (make_mess, aux);
}

View File

@ -1,7 +1,7 @@
/* { dg-do link } */
/* { dg-options "-O2" } */
extern void link_error (void);
extern void link_error (void) { /* XFAIL */ }
typedef unsigned char(*Calculable)(void);

View File

@ -1410,11 +1410,6 @@ useless_type_conversion_p (tree outer_type, tree inner_type)
if (!prototype_p (outer_type))
return true;
/* A conversion between unprototyped and empty argument list is ok. */
if (TYPE_ARG_TYPES (outer_type) == void_list_node
&& !prototype_p (inner_type))
return true;
/* If the unqualified argument types are compatible the conversion
is useless. */
if (TYPE_ARG_TYPES (outer_type) == TYPE_ARG_TYPES (inner_type))