[ ... ]
I have not found any section that explicitly _mandates_ it. But I
did find those above sections about conversions. Now, maybe I did not
look at the right pages, but I could not find anything saying a
conversion from int to pointer (a pointer to int, specifically) was
legal, except for an int being 0 (simplified quote, see 4.10/1).
If the Standard does indeed not mention it anywhere, then I
conclude this is undefined behaviour. Thus, the compiler could
silently ignore it and not "abort with an error." On the other hand,
you said a diagnostic is required. Why?
4/1: Standard conversions are implicit conversions defined for built-
in types. Clause 4 enumerates the full set of such conversions.
4/3: An expression e can be implicitly converted to a type T if and
only if the declaration “T t=e;” is well-formed, for some invented
temporary variable t (8.5).
1.4/1: The set of diagnosable rules consists of all syntactic and
semantic rules in this International Standard except for those rules
containing an explicit notation that “no diagnostic is required” or
which are described as resulting in “undefined behavior.”
1.4/2: If a program contains a violation of any diagnosable rule, a
conforming implementation shall issue at least one diagnostic
message...