Wczoraj dostałem załączony fragment kodu C++ z pytaniem, czemu po włączeniu UB sanitizera skompilowany program wybucha.

Zamieszczam jako przykład autentycznego błędu w kompilatorze, bo na serio raczej rzadko coś takiego się dzisiaj widzi.

Zerknijcie w kodzie asemblera na listing funkcji f::h(unsigned long, void (c::*)()).
W linii 16 następuje skok do etykiety .L3, gdzie odczytywany jest rejestr R14. Powinna być w nim wartość parametru idx funkcji.

Problem w tym, że R14 nie został jeszcze nigdzie ustawiony (prawidłowa wartość jest w RSI).

Zacząłem się teraz zastanawiać, czy może w kodzie UB sanitizera jest jakiś undefined behaviour. ;-)
Clang kompiluje ten kod bez problemu.