re PR tree-optimization/46806 (-O3 implies 0 <= 8 <= 7)

2010-12-06  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/46806
	* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Do not
	coalesce different types.

	* g++.dg/torture/20100825.C: New testcase.

From-SVN: r167490
This commit is contained in:
Richard Guenther 2010-12-06 12:53:38 +00:00 committed by Richard Biener
parent 6b7fb143ae
commit bbb9d2fd5c
4 changed files with 29 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2010-12-06 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46806
* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Do not
coalesce different types.
2010-12-06 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46785

View File

@ -1,3 +1,8 @@
2010-12-06 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46806
* g++.dg/torture/20100825.C: New testcase.
2010-12-06 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46785

View File

@ -0,0 +1,15 @@
// { dg-do run }
typedef enum { zero = 0, one = 1, two = 2, ENUM_MAX = 3 } my_enum;
my_enum e;
extern "C" void abort (void);
int __attribute__((noinline)) foo() { return 10; }
int main()
{
int r;
r = foo();
if ((r < 0) || (r >= ENUM_MAX))
return 0;
e = (my_enum)r;
abort ();
}

View File

@ -226,11 +226,11 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
ign2 = false;
}
/* Don't coalesce if the two variables aren't type compatible. */
if (!types_compatible_p (TREE_TYPE (root1), TREE_TYPE (root2)))
/* Don't coalesce if the two variables are not of the same type. */
if (TREE_TYPE (root1) != TREE_TYPE (root2))
{
if (debug)
fprintf (debug, " : Incompatible types. No coalesce.\n");
fprintf (debug, " : Different types. No coalesce.\n");
return false;
}