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

Thomas Koenig <tkoenig at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |UNCONFIRMED
     Ever confirmed|1                           |0

--- Comment #7 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
(In reply to Steve Kargl from comment #5)
> On Fri, Dec 27, 2013 at 07:53:00PM +0000, tkoenig at gcc dot gnu.org wrote:
> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59604
> > 
> > Thomas Koenig <tkoenig at gcc dot gnu.org> changed:
> > 
> >            What    |Removed                     |Added
> > ----------------------------------------------------------------------------
> >              Blocks|                            |58003
> > 
> > --- Comment #4 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
> > (In reply to kargl from comment #2)
> > > (In reply to Thomas Koenig from comment #1)
> > > > TRANSFER gets this right.
> > > 
> > > It is unclear what you mean here.
> > 
> > What I mean is that
> > 
> > program test
> >   if (transfer(z'FFFFFFFF',1) /= -1) call abort
> > end program test
> > 
> > does not call abort.
> 
> I suspect that the above is not portable as transfer() simply copies
> bits.  z'FFFFFFF' is an integer(8) (or integer(16)) entity.  Transfer()
> is copying 32-bits from that entity.  It is clear from the 
> -fdump-tree-original that middle-end is "converting" the resulting
> 32-bit thing into -1.  So, you're relying on twos-complement wrap
> around semantics.

As gcc supports only twos complement arithmetic, I think this is OK.

Reply via email to