[llvm-bugs] [Bug 33990] clang -O2 miscompiled pointer arithmetics leads to core dumps
via llvm-bugs
llvm-bugs at lists.llvm.org
Sat Jul 29 20:24:22 PDT 2017
https://bugs.llvm.org/show_bug.cgi?id=33990
Tim Northover <t.p.northover at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |t.p.northover at gmail.com
Status|NEW |RESOLVED
Resolution|--- |INVALID
--- Comment #2 from Tim Northover <t.p.northover at gmail.com> ---
The program has undefined behaviour in this line:
char *c = (char *)0 + foo();
The left-hand side of the addition is a null pointer, which you're not allowed
to perform arithmetic on.
The clause in the standard defines a few situations in which adding an integer
to a pointer produces a valid result and simply says "otherwise, the behaviour
is undefined". All of the actually defined cases start with a valid object
(which null isn't).
The definition of foo contains a similarly invalid subtraction.
I'm not sure if you've encountered undefined behaviour before but if not Chris
Lattner wrote a pretty good blog series on it a few years ago:
http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html
The short message is: avoid it at all costs. Its existence is what lets C and
C++ outperform most other languages but if you actually end up executing any
all bets are off (it's often referred to jokingly as "nasal demons" because it
would be perfectly permitted for the compiler to make demons fly out of your
nose according to the standard if your program has UB).
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170730/f312b55e/attachment.html>
More information about the llvm-bugs
mailing list