News for hackers. Stuff that matters.
Re:On the redundancy of C99's restrict by justincormack on Wednesday July 25, 2012 @09:15AM (#4290734)
Undefined behaviour yes, but does that really make it illegal? Sure the compiler is allowed to play some AC/DC at this point or other undefined behaviour, but I am not sure that makes it an assertion per se?
Re:On the redundancy of C99's restrict by mjn on Wednesday July 25, 2012 @09:29AM (#4290801)
That's true, but in many cases of undefined behavior, compilers take the liberty of interpreting it as an assertion. In this case, for example, it's legal for the compiler to assume that p and q don't alias when it sees this expression, because either: 1) they really don't alias, in which case the assumption and subsequent optimization is correct; or 2) they really do alias, but in that case the behavior is undefined, so the compiler's choice to apply "erroneous" optimizations is not prohibited.

It's a common approach in C compilers for inferring more optimization-relevant semantics than the language constructs explicitly specify.

Re:On the redundancy of C99's restrict by cygx on Wednesday July 25, 2012 @09:46AM (#4290878)
How else would you define the legality of a C program? The language specification comes with constraints, and code which violates those will probably fail to compile (eg syntax errors); any other semantic violation (ie when you see 'shall' or 'shall not' outside of a constraint clause) only results in undefined behavior.

See also the C99 rationale:

"Undefined behavior gives the implementor license not to catch certain program errors that are difficult to diagnose. It also identifies areas of possible conforming language extension: the implementor may augment the language by providing a definition of the officially undefined behavior."

Undefined behavior only occurs in case of program errors or language extensions, in which case you're not dealing with standard C, but C-with-extensions.