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:
parent
5d8a54345a
commit
79077aea85
5 changed files with 40 additions and 2 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
15
gcc/testsuite/gcc.dg/pr30762-1.c
Normal file
15
gcc/testsuite/gcc.dg/pr30762-1.c
Normal 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);
|
||||
}
|
9
gcc/testsuite/gcc.dg/pr30762-2.c
Normal file
9
gcc/testsuite/gcc.dg/pr30762-2.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
/* PR c/30762 */
|
||||
/* { dg-do compile } */
|
||||
|
||||
typedef struct { int i; } D;
|
||||
|
||||
void
|
||||
foo (D x)
|
||||
{
|
||||
}
|
Loading…
Add table
Reference in a new issue