re PR c/30762 (IMA messes up with inlining)

PR c/30762
	* c-typeck.c (convert_for_assignment): Call comptypes for
	RECORD_TYPE or UNION_TYPE.

	* gcc.dg/pr30762-1.c: New test.
	* gcc.dg/pr30762-2.c: New test.

From-SVN: r123073
This commit is contained in:
Jakub Jelinek 2007-03-20 00:26:14 +01:00 committed by Jakub Jelinek
parent 5d8a54345a
commit 79077aea85
5 changed files with 40 additions and 2 deletions

View File

@ -1,5 +1,9 @@
2007-03-20 Jakub Jelinek <jakub@redhat.com>
PR c/30762
* c-typeck.c (convert_for_assignment): Call comptypes for
RECORD_TYPE or UNION_TYPE.
PR inline-asm/30505
* reload1.c (reload): Do invalid ASM checking after
cleanup_subreg_operands.

View File

@ -3896,10 +3896,16 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
|| coder == BOOLEAN_TYPE))
return convert_and_check (type, rhs);
/* Aggregates in different TUs might need conversion. */
if ((codel == RECORD_TYPE || codel == UNION_TYPE)
&& codel == coder
&& comptypes (type, rhstype))
return convert_and_check (type, rhs);
/* Conversion to a transparent union from its member types.
This applies only to function arguments. */
else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
&& (errtype == ic_argpass || errtype == ic_argpass_nonproto))
if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
&& (errtype == ic_argpass || errtype == ic_argpass_nonproto))
{
tree memb, marginal_memb = NULL_TREE;

View File

@ -1,5 +1,9 @@
2007-03-20 Jakub Jelinek <jakub@redhat.com>
PR c/30762
* gcc.dg/pr30762-1.c: New test.
* gcc.dg/pr30762-2.c: New test.
PR inline-asm/30505
* gcc.target/i386/pr30505.c: New test.

View File

@ -0,0 +1,15 @@
/* PR c/30762 */
/* { dg-do compile } */
/* { dg-options "--combine -O3" } */
/* { dg-additional-sources pr30762-2.c } */
typedef struct { int i; } D;
extern void foo (D);
void
bar (void)
{
D d;
d.i = 1;
foo (d);
}

View File

@ -0,0 +1,9 @@
/* PR c/30762 */
/* { dg-do compile } */
typedef struct { int i; } D;
void
foo (D x)
{
}