grappas

@wrazik no ale czej... to jest coś ze scopem, czy po prostu bug w kompilatorze?

wrazik

@grappas nic z tych rzeczy, optymalizacja kompilatora z powodu UB. Pusta pętla w cpp to UB

grappas

Pusta pętla w cpp to UB


To zrozumiałe, ale co to zmienia w kwestii wyjścia poza main() i odpalenie sobie pierwszej z brzegu funkcji?

wrazik

@grappas UB z założenia może spalić Ci chatę i zgwałcić żonę. Jakaś optymalizacja pewnie wkracza, niezrozumiała z kodu źródłowego ale mogąca mieć sens w jakiejś reprezentacji AST (albo jakiejś innej reprezentacji kompilatora)

grappas

@wrazik czyli ktoś kto tworzył standard: "chuj kurwa to nie ma sensu, ale jest semantycznie poprawnie, to tak to zategujemy"

grappas

@wrazik Pójdźmy o krok dalej ( ͡° ͜ʖ ͡°) :

07370779-d738-45ef-8b9e-ae5c5530254b
piotrb

@wrazik Pusta pętla w cpp to UB

Gdzie to jest zapisane?

wrazik

@piotrb https://en.cppreference.com/w/cpp/language/for

"As part of the C++ forward progress guarantee, the behavior is undefined if a loop that has no observable behavior (does not make calls to I/O functions, access volatile objects, or perform atomic or synchronization operations) does not terminate. Compilers are permitted to remove such loops. "

piotrb

@wrazik Tylko to jest bardzo kontrintuicyjne, wywołanie funkcji, która nigdzie nawet nie była wywoływana. Ja oczywiście jestem daleki od używania jakichkolwiek UB w kodzie, ale taka akcja to prawie jak meteoryt.

Zaloguj się aby komentować