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:
parent
6c0c92e6b3
commit
8f66db3b32
5 changed files with 40 additions and 6 deletions
|
@ -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>
|
2011-01-14 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/47286
|
PR tree-optimization/47286
|
||||||
|
|
|
@ -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>
|
2011-01-14 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/47286
|
PR tree-optimization/47286
|
||||||
|
|
23
gcc/testsuite/gcc.dg/torture/pr47281.c
Normal file
23
gcc/testsuite/gcc.dg/torture/pr47281.c
Normal 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);
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
/* { dg-do link } */
|
/* { dg-do link } */
|
||||||
/* { dg-options "-O2" } */
|
/* { dg-options "-O2" } */
|
||||||
|
|
||||||
extern void link_error (void);
|
extern void link_error (void) { /* XFAIL */ }
|
||||||
|
|
||||||
typedef unsigned char(*Calculable)(void);
|
typedef unsigned char(*Calculable)(void);
|
||||||
|
|
||||||
|
|
|
@ -1410,11 +1410,6 @@ useless_type_conversion_p (tree outer_type, tree inner_type)
|
||||||
if (!prototype_p (outer_type))
|
if (!prototype_p (outer_type))
|
||||||
return true;
|
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
|
/* If the unqualified argument types are compatible the conversion
|
||||||
is useless. */
|
is useless. */
|
||||||
if (TYPE_ARG_TYPES (outer_type) == TYPE_ARG_TYPES (inner_type))
|
if (TYPE_ARG_TYPES (outer_type) == TYPE_ARG_TYPES (inner_type))
|
||||||
|
|
Loading…
Add table
Reference in a new issue