The only instance where anything would be source‐breaking is if code is already trying to use equal text—such as é
(decomposed) and é
(composed)—as two separate identifiers. The compiler would begin considering them equal. Such usage is highly unlikely in practice, no matter how exotic the human language of the developer.
Even if a user’s code has been written in one normalization form (or a random hodge‐podge) and the compiler decides to think internally in the other form, the user will see no observable difference. All the same identifiers still reference all the same things.
The issue is only on the ABI level. If an already compiled binary used one normalization form and the compiler starts mangling names only in the opposite normalization form, then no new module could link against any existing symbol whose name differs between the normalization forms. (Since ASCII is static across normalization, users of ASCII code would never notice.)