Re: [PATCH] C undefined behavior fix

Pavel Machek
2002-01-04T08:02:35Z

Hi!

> > (cc list trimmed)
> >
> > alan@lxorguk.ukuu.org.uk said:
> > > If you want a strcpy that isnt strcpy then change its name or use a
> > > different language 8)
> >
> > The former is not necessarily sufficient in this case. You've still done the
> > broken pointer arithmetic, so even if the function isn't called strcpy() the
> > compiler is _still_ entitled to replace it with a call to memcpy() or even
> > machine_restart() before sleeping with your mother and starting WW III.
> >
> > Granted, it probably _won't_ do any of those today, but you should know
> > better than to rely on that.
> >
> > What part of 'undefined behaviour' is so difficult for people to understand?
>
> I think it comes down to an expectation that if the behaviour is
> undefined, anything _could_ happen, but what should happen is that it
> should just be passed along to (in this case) strcpy un-modified.

gcc is allowed not to pass it anywhere. You may not second guess
optimizer. If it is not defined, it is not defined.

Imagine

strcpy(a, "xyzzy"+b);
if (b>16)
printf("foo");

. gcc is permitted to kill printf(), because if b<0 or b>16 behaviour is
undefined. So gcc may assume b<=16.

Quoting alan:

################################################################################
# What part of 'undefined behaviour' is so difficult for people to understand? #
################################################################################

Pavel
--
(about SSSCA) "I don't say this lightly. However, I really think that the U.S.
no longer is classifiable as a democracy, but rather as a plutocracy." --hpa