Size: a a a

2020 May 05

CD

Constantine Drozdov in pro.cxx
я читаю TOKEN_INFO& из области, в которой создан TOKEN_INFO
источник

A

Alex in pro.cxx
может, я чего-то недопонял, но всё равно не верю, что так можно
источник

CD

Constantine Drozdov in pro.cxx
Alex
может, я чего-то недопонял, но всё равно не верю, что так можно
у вас неправильное понимание, что UB создает сам по себе каст. UB возникает, когда вы неправильно показываете компилятору тип объекта, который читаете/пишете в памяти
источник

A

Alex in pro.cxx
Constantine Drozdov
я читаю TOKEN_INFO& из области, в которой создан TOKEN_INFO
думаю, что если компилятор С++ не видел, что там создан TOKEN_INFO, то это УБ. А он не видел, хотя бы потому, что не видел исходного кода порождающей функции.
источник

CD

Constantine Drozdov in pro.cxx
Alex
думаю, что если компилятор С++ не видел, что там создан TOKEN_INFO, то это УБ. А он не видел, хотя бы потому, что не видел исходного кода порождающей функции.
Это, конечно же, неверно. А если компилятор не видит, что там барьер памяти, что, можно и перед WriteFile в буфер не писать?
источник

A

Alex in pro.cxx
чем каст char* -> TOKEN_INFO* в случае, когда char* получен из GetTokenInfo, отличается от такого же каста, когда char* прочитан из файла или принят из сокета?
источник

A

Alex in pro.cxx
все эти случаи не УБ? Если так, то все правила strict aliasing - фарс, не может такого быть
источник

CD

Constantine Drozdov in pro.cxx
Alex
думаю, что если компилятор С++ не видел, что там создан TOKEN_INFO, то это УБ. А он не видел, хотя бы потому, что не видел исходного кода порождающей функции.
А представьте, что будет, если ваш компилятор не увидит код printf и блокировки мьютекса и переставит вызовы местами
источник

A

Alex in pro.cxx
какого мьютекса?
источник

A

Alex in pro.cxx
а, понял
ну так он считает, что у printf неизвестные побочные эффекты, поэтому и не сделает так
источник

CD

Constantine Drozdov in pro.cxx
Alex
какого мьютекса?
мой код
mydll_lock(mutex);
myddl_printf("Hello, world!");
mydll_unlock(mutex);
источник

CD

Constantine Drozdov in pro.cxx
Alex
а, понял
ну так он считает, что у printf неизвестные побочные эффекты, поэтому и не сделает так
у функции GetTokenInformation есть неизвестные побочные эффекты, если вам так проще
источник

CD

Constantine Drozdov in pro.cxx
в частности, её вызов может изменять фактические типы размещенных в памяти объектов
источник

A

Alex in pro.cxx
я писал, что факт наличия УБ в коде не означает факт его неожиданного поведения в рантайме, но это всё равно УБ и код всё равно невалиден
источник

ПК

Побитый Кирпич... in pro.cxx
Constantine Drozdov
А представьте, что будет, если ваш компилятор не увидит код printf и блокировки мьютекса и переставит вызовы местами
Я считаю что уб-ость не зависит от способностей компилятора видеть код. Если в следующей версии компилятор станет экстрасенсом и сможет увидеть код в dll, то что уб возникнет? Но уб возникает не от действий компилятора, а от нарушения стандарта
источник

A

Alex in pro.cxx
просто он работал, работает и будет работать, можно не париться. Но это УБ.
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
Я считаю что уб-ость не зависит от способностей компилятора видеть код. Если в следующей версии компилятор станет экстрасенсом и сможет увидеть код в dll, то что уб возникнет? Но уб возникает не от действий компилятора, а от нарушения стандарта
> Если в следующей версии компилятор станет экстрасенсом и сможет увидеть код в dll, то что уб возникнет?
Да
источник

CD

Constantine Drozdov in pro.cxx
Придется костылять все имеющиеся компиляторы
источник

ПК

Побитый Кирпич... in pro.cxx
Constantine Drozdov
> Если в следующей версии компилятор станет экстрасенсом и сможет увидеть код в dll, то что уб возникнет?
Да
Считаю, что это неверное понимание уб
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
Считаю, что это неверное понимание уб
Считай :) Стандарт С++ не регламентирует экстрасенсорные способности и машинный код в dll (пока что)
источник