Does “undefined behaviour” extend to compile-time?

You’re all ignoring the actual definition and focusing on the note, The standard imposes no requirements.” – @R.MartinhoFernandes

The message above was written by the given user in Lounge<C++> and makes a very valid argument; the standard doesn’t impose any requirements when it comes to code that invokes undefined behavior.


! ! !

undefined-behavior stretches even to the far corner of parsing the input data (ie. code) by the compiler, as verified with the below quotations from both the C++11 and C99 standards.

To answer your question with one sentence;

  • undefined behavior is not limited to runtime execution, and it’s permissible to crash during compilation “in a documented manner characteristic of the environment” 1

“in a documented manner characteristic of the environment” is a kind of odd statement, you could pretty much write a compiler documenting that it might crash upon any given code (that’s invalid) to grant it the possibility to crash whenever it wants to.

1. quote from the C++11/C99 standards


###

###1.3.24 [defns.undefined]

Undefined behavior; behavior for which this International Standard
imposes no requirements

[ Note:

Undefined behavior may be expected
when this International Standard omits any explicit definition of
behavior or when a program uses an erroneous construct or erroneous
data.

Permissible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation
or program execution in a documented manner characteristic of the
environment (with or without the issuance of a diagnostic message), to
terminating a translation or execution (with the issuance of a
diagnostic message).

Many erroneous program constructs do not engender undefined behavior;
they are required to be diagnosed.

end note ]


###

3.4.3 – Undefined Behavior

  1. behavior, upon use of a nonportable or erroneous program construct or of erroneous data, for which this >International Standard imposes no requirements

  2. NOTE Possible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation
    or program execution
    in a documented manner characteristic of the
    environment (with or without the issuance of a diagnostic message), to
    terminating a translation or execution
    (with the issuance of a
    diagnostic message).

Leave a Comment