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

Nathan Froyd <froydnj at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2011-11-07
     Ever Confirmed|0                           |1

--- Comment #2 from Nathan Froyd <froydnj at gcc dot gnu.org> 2011-11-07 
00:06:11 UTC ---
I can confirm that the problem still happens with the given options (-mh -mn
-mint32).  I don't know much about this target, but the equivalent C front-end
code has:

  /* Determine integer type to perform computations in.  This will usually
     be the same as the result type (ptrdiff_t), but may need to be a wider
     type if pointers for the address space are wider than ptrdiff_t.  */
  if (TYPE_PRECISION (restype) < TYPE_PRECISION (TREE_TYPE (op0)))
    inttype = lang_hooks.types.type_for_size
        (TYPE_PRECISION (TREE_TYPE (op0)), 0);
  else
    inttype = restype;

and uses that as the result of the division, with a conversion to restype
(ptrdiff_type_node) as in Paolo's patch.

I think it'd be better to try to make the C and C++ front-ends as close as
possible on this; I can try a patch that combines the above and Paolo's, but
I'm not sure I'd get to it before stage 1 closes.

Reply via email to