re PR middle-end/37713 (ice for legal code with -O3 on 20080926)

2008-10-02  Richard Guenther  <rguenther@suse.de>

	PR middle-end/37713
	* tree-ssa.c (useless_type_conversion_p_1): For COMPLEX_TYPE
	and VECTOR_TYPE recurse with useless_type_conversion_p which
	properly handles void pointer conversion.
 
	* gcc.c-torture/compile/pr37713.c: New testcase.

From-SVN: r140832
This commit is contained in:
Richard Guenther 2008-10-02 13:11:12 +00:00 committed by Richard Biener
parent 068450d045
commit 0d17b70a0a
4 changed files with 26 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2008-10-02 Richard Guenther <rguenther@suse.de>
PR middle-end/37713
* tree-ssa.c (useless_type_conversion_p_1): For COMPLEX_TYPE
and VECTOR_TYPE recurse with useless_type_conversion_p which
properly handles void pointer conversion.
2008-10-02 Danny Smith <dannysmith@users.sourceforge.net>
PR target/37528

View File

@ -1,3 +1,8 @@
2008-10-02 Richard Guenther <rguenther@suse.de>
PR middle-end/37713
* gcc.c-torture/compile/pr37713.c: New testcase.
2008-10-01 Andrew Pinski <andrew_pinski@playstation.sony.com>
* gcc.target/powerpc/altivec-cell-1.c: New test.

View File

@ -0,0 +1,10 @@
void add_opush(void)
{
unsigned char formats[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
void *dtds[sizeof(formats)];
unsigned int i;
unsigned char dtd = 0x08;
for (i = 0; i < sizeof(formats); i++)
dtds[i] = &dtd;
sdp_seq_alloc(dtds);
}

View File

@ -1159,15 +1159,15 @@ useless_type_conversion_p_1 (tree outer_type, tree inner_type)
/* Recurse for complex types. */
else if (TREE_CODE (inner_type) == COMPLEX_TYPE
&& TREE_CODE (outer_type) == COMPLEX_TYPE)
return useless_type_conversion_p_1 (TREE_TYPE (outer_type),
TREE_TYPE (inner_type));
return useless_type_conversion_p (TREE_TYPE (outer_type),
TREE_TYPE (inner_type));
/* Recurse for vector types with the same number of subparts. */
else if (TREE_CODE (inner_type) == VECTOR_TYPE
&& TREE_CODE (outer_type) == VECTOR_TYPE
&& TYPE_PRECISION (inner_type) == TYPE_PRECISION (outer_type))
return useless_type_conversion_p_1 (TREE_TYPE (outer_type),
TREE_TYPE (inner_type));
return useless_type_conversion_p (TREE_TYPE (outer_type),
TREE_TYPE (inner_type));
/* For aggregates we may need to fall back to structural equality
checks. */