This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Optimisations and undefined behaviour
- From: Vincent Lefevre <vincent+gcc at vinc17 dot org>
- To: gcc-help at gcc dot gnu dot org
- Date: Mon, 9 Nov 2015 13:42:55 +0100
- Subject: Re: Optimisations and undefined behaviour
- Authentication-results: sourceware.org; auth=none
- References: <563BC190 dot 7080406 at hesbynett dot no> <563C7EB6 dot 9050401 at redhat dot com> <563C9DD3 dot 9030407 at hesbynett dot no> <563F9E4C dot 5000504 at redhat dot com> <563FA2DF dot 4050008 at redhat dot com> <alpine dot DEB dot 2 dot 20 dot 1511082042570 dot 2160 at laptop-mg dot saclay dot inria dot fr> <20151109002734 dot GD5808 at zira dot vinc17 dot org> <20151109004946 dot GA2103 at gate dot crashing dot org> <20151109082849 dot GA5556 at zira dot vinc17 dot org> <20151109094012 dot GA12699 at gate dot crashing dot org>
On 2015-11-09 03:40:12 -0600, Segher Boessenkool wrote:
> On Mon, Nov 09, 2015 at 09:28:49AM +0100, Vincent Lefevre wrote:
> > On 2015-11-08 18:49:46 -0600, Segher Boessenkool wrote:
> > > On Mon, Nov 09, 2015 at 01:27:34AM +0100, Vincent Lefevre wrote:
> > > > > Why not simply:
> > > > > unsigned y = x;
> > > > > return y*y*y;
> > > > > ? This is an example where defined behavior is so easy to get...
> > > >
> > > > But what if the result of y*y*y (an unsigned int) does not fit in
> > > > an int?
> > >
> > > That is implementation-defined. not undefined (6.3.1.3); GCC documents
> > > it like this:
> > >
> > > For conversion to a type of width N, the value is reduced modulo
> > > 2^N to be within range of the type; no signal is raised.
> >
> > That's what GCC does, but what if the user uses another compiler
> > or GCC decides to change this behavior in the future?
>
> Then it is still not undefined behaviour. It can give different results
> of course.
... including a signal, which is not acceptable for the OP, if I
understand correctly ("we don't care about the result in such cases"
doesn't imply that the program may terminate immediately).
--
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)