Messages in this thread | | | Date | Thu, 3 Jan 2002 23:39:42 +0100 | From | Pavel Machek <> | Subject | Re: [PATCH] C undefined behavior fix |
| |
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 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |