Assert and undefined behavior

kdevel kdevel at vogtner.de
Sat Oct 14 21:36:53 UTC 2017


On Saturday, 14 October 2017 at 09:32:32 UTC, Timon Gehr wrote:
> Also, UB can and does sometimes mean that the program can 
> execute arbitrary code. It's called "arbitrary code execution": 
> https://en.wikipedia.org/wiki/Arbitrary_code_execution

This confuses different levels of reasoning. In C/C++ "undefined 
behavior" is a property of the SOURCE code with respect to the 
specification. It states: The spec does not not apply, it does 
not define the semantic.

This issue is totally different from the question what a given 
program containing undefined behavior actually does after is 
compiles and the after the linker produces an executable. This is 
reasoning about generated MACHINE code.

A result of this confusion has been that some clever people tried 
to "detect" certain kinds of undefined behavior "after" they 
"happended". E.g. 
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=30475> This is the 
danger of undefined behavior: The MACHINE code may also work as 
the programmer expected. At least for some time.




More information about the Digitalmars-d-learn mailing list