Size: a a a

2020 September 27

PO

Pavel Odintsov in ntwrk
угу
источник

PO

Pavel Odintsov in ntwrk
UB в чистом виде, компилятор может делать что угодно ему
источник

PO

Pavel Odintsov in ntwrk
ну имхо это яркий пример причем весьма сложный на мой взгляд как в С себе отстрелить ногу на пустом месте
источник

PO

Pavel Odintsov in ntwrk
и там тонны куда более простых
источник

PO

Pavel Odintsov in ntwrk
имхо, то, что С софт работает - просто частный случай его падения )))
источник

PO

Pavel Odintsov in ntwrk
а если програааамма пересоберется под АРМ
источник

PO

Pavel Odintsov in ntwrk
источник

PO

Pavel Odintsov in ntwrk
забавно, а в этом сервисе у меня не воспроизводится )
источник

PO

Pavel Odintsov in ntwrk
<source>: In function 'int main()':

<source>:7:47: warning: left shift count >= width of type [-Wshift-count-overflow]

   7 |     printf("netmask for /0 is %x", 0xFFFFFFFF << ( 32 - 0 ));

     |                                    ~~~~~~~~~~~^~~~~~~~~~~~~

Compiler returned: 0
источник

PO

Pavel Odintsov in ntwrk
а вот так он верещит если явно указать 32 =)
источник

分解物質 in ntwrk
Pavel Odintsov
UB в чистом виде, компилятор может делать что угодно ему
ну вот кстати конкретно в твоём случае он не придумывал подставлять любую фигню оказывается. он заранее посчитал что в x86 сделает инструкция SAL если ей подсунуть дальность сдвига 32
источник

分解物質 in ntwrk
The count operand can be an immediate value or the CL register. The count is masked to 5 bits (or 6 bits if in 64-bit mode
источник

PO

Pavel Odintsov in ntwrk
угу, компилятор правит прикольные штуки в языке и спасает меня от отстрела ноги
источник

PO

Pavel Odintsov in ntwrk
но это, опять же, везение
источник

PO

Pavel Odintsov in ntwrk
другой компайлер, дургая платформа, другой режим компиляции и все, не подставит и будет оно 0xFFFFFFF
источник

分解物質 in ntwrk
分解物質
The count operand can be an immediate value or the CL register. The count is masked to 5 bits (or 6 bits if in 64-bit mode
32 как раз выходит в шестой бит а первые пять нули, вот и получается что сдвига нет
источник

PO

Pavel Odintsov in ntwrk
вообще это выглядит как атавизм x86
источник

PO

Pavel Odintsov in ntwrk
на x86_64 такого все же я бы не ожидал
источник

分解物質 in ntwrk
分解物質
The count operand can be an immediate value or the CL register. The count is masked to 5 bits (or 6 bits if in 64-bit mode
^
источник

分解物質 in ntwrk
с 64бит регистрами маска просто не 5 а 6 первых битов
источник