Perché l’ottimizzatore GCC 6 ottimizzato rompe il pratico codice C ++?

GCC 6 ha una nuova funzione di ottimizzazione : presuppone che this sia sempre nullo e ottimizzato in base a ciò.

La propagazione dell’intervallo di valori ora presuppone che questo puntatore delle funzioni membro C ++ non sia null. Ciò elimina i comuni controlli dei puntatori nulli, ma interrompe anche alcuni code-base non conformi (come Qt-5, Chromium, KDevelop) . Come un temporaneo work-around -fno-delete-null-pointer-checks può essere utilizzato. Il codice errato può essere identificato usando -fsanitize = undefined.

Il documento di cambiamento definisce chiaramente questo come pericoloso perché rompe una quantità sorprendente di codice frequentemente usato.

Perché questa nuova ipotesi romperebbe il codice C ++ pratico? Esistono modelli particolari in cui i programmatori incuranti o disinformati fanno affidamento su questo particolare comportamento indefinito? Non riesco a immaginare nessuno che scrive if (this == NULL) perché è così innaturale.