The standard only very loosely defines what "semantics" actually mean. Most importantly, there is no definition of the term in section 3 Terms, definitions, and symbols of the standard.
What the standard does define in that section is the meaning of "constraint":
3.8
1 constraint
restriction, either syntactic or semantic, by which the exposition of
language elements is to be interpreted
Added emphasis on "...or semantic".
The standard then goes on:
4. Conformance
1 In this document, "shall" is to be interpreted as a requirement on an implementation or on a program; conversely, "shall not" is to be interpreted as a prohibition.
2 If a "shall" or "shall not" requirement that appears outside of a constraint or runtime-constraint is violated, the behavior is undefined.
And then we come to:
5.1.1.3 Diagnostics
1 A conforming implementation shall produce at least one diagnostic message (identified in an implementation-defined manner) if a preprocessing translation unit or translation unit contains a violation of any syntax rule or constraint, even if the behavior is also explicitly specified as undefined or implementation-defined.
Added emphasis on "...or constraint".
As per 3.8, being "only" a semantic restriction does not rule out something being a constraint.
As per 4. 1), a "shall" is a requirement, a "shall not" a prohibition.
I interpret both to indicate a constraint.
As per 5.1.1.3, not only violated syntax rules, but also violated constraints require a diagnostic, even if (as per 4. 2)) "[...] the behavior is also explicitly specified as undefined or implementation-defined."
Note, however, to avoid misunderstandings:
I am referring here to semantics specified with a "shall" / "shall not" in the standard, not any which semantics of any which program.