------- Comment #4 from steven at gcc dot gnu dot org  2009-01-02 18:21 -------
Confirmed at r134530 with the following reduced test case:

typedef unsigned int USItype __attribute__ ((mode (SI)));
typedef unsigned int UDItype __attribute__ ((mode (DI)));
typedef USItype halffractype;
typedef UDItype fractype;

typedef struct
{
  unsigned int sign;
  int normal_exp;

  union
  {
    fractype ll;
    halffractype l[2];
  } fraction;
} fp_number_type;

extern void bar ();

extern fp_number_type * _fpmul_parts (fractype, fractype, fp_number_type *);
fp_number_type *
_fpmul_parts (fractype low, fractype high, fp_number_type *tmp)
{
  while (high >= ((fractype) 1 << (52 + 1 + 8L)))
    {
      tmp->normal_exp++;
      if (high & 1)
        bar ();
      high >>= 1;
    }
  while (high < ((fractype) 1 << (52 + 8L)))
    {
      tmp->normal_exp--;
      high <<= 1;
    }

  tmp->fraction.ll = high;
  return tmp;
}

Unfortunately I can't reproduce it with the top-of-trunk of today.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36003

Reply via email to