tiemann@arkesden.eng.sun.com (Michael Tiemann) (12/13/89)
arkesden% diff -c2 integrate.c~ integrate.c
*** integrate.c~ Wed Dec 6 19:30:47 1989
--- integrate.c Tue Dec 12 11:16:16 1989
***************
*** 1162,1166 ****
be ignored since we are changing (REG n) into
inline_target. */
! if (REG_FUNCTION_VALUE_P (XEXP (pattern, 0)))
break;
/* Don't emit a (USE (REG n)) of something which
--- 1162,1166 ----
be ignored since we are changing (REG n) into
inline_target. */
! if (! ignore && REG_FUNCTION_VALUE_P (XEXP (pattern, 0)))
break;
/* Don't emit a (USE (REG n)) of something which
arkesden%
This fixes a problem which can be repeated by compiling the following
file with GCC version 1.36:
typedef struct RegInfo
{
char val;
char fake;
} RegInfo;
typedef struct Field
{
RegInfo* rip;
} Field;
inline char get_val(register Field *t)
{
return t->rip->fake;
}
Field *F ( register Field *t, RegInfo* ri )
{
t->rip = ri;
get_val(t);
ri->val = get_val(t);
return t;
}
main()
{
RegInfo ri;
Field f;
F (&f, &ri);
}
In this manner:
!gc
gcc l21.c -dr
arkesden% a.out
Segmentation fault
arkesden%
Michael