Wie kann man einige vorzeichenlose Integer-Überlauffehler von UBsan unterdrücken?
Die meisten von meinen-fsanitize=unsigned-integer-overflow
-Fehler sind Fehler, aber manchmal verwende ich sie explizit wie beabsichtigt, was dazu führt, dass UBSan falsch positive Ergebnisse liefert.
Gibt es eine Möglichkeit, die UBSan-Prüfung für vorzeichenlose Ganzzahlenüberläufe für einen bestimmten Ausdruck zu deaktivieren?
EDIT als Antwort auf Shafik Kommentar, hier ist ein Beispiel:
unsigned a = 0;
unsigned b = a - 1; // error: unsigned integer overflow
Die meiste Zeit ist das ein Fehler, manchmal ist es nicht. Mit UBSan kann man jedes Mal, wenn dies passiert, die Fehler beheben, aber ich habe keinen Weg gefunden, um die Fehlalarme auszuschalten.
EDIT 2: Um die Prüfung zu aktivieren, muss entweder-fsanitize=integer
(um alle Ganzzahlprüfungen zu aktivieren) oderfsanitize=unsigned-integer-overflow
. Aus den Kommentaren unten geht hervor, dass der Check nur in clang und noch nicht in GCC verfügbar ist.