Баг кодогенерации MSVC++ 6
От: Андрей Тарасевич Беларусь  
Дата: 21.04.05 22:33
Оценка: 105 (6)
Привет

Может быть это известная проблема, но я, если мне не изменяет память, раньше про нее не слышал. Компилятор из MSVC++ 6 SP 5 при включенной оптимизации сичтает, что 'ui % UINT_MAX' эквивалентно просто 'ui', где 'ui' — значение типа 'unsigned int'. Аналогичная проблема имеет место с 'unsigned long' и 'ULONG_MAX'.

В результате функция

unsigned int foo(unsigned int i){
  return i % UINT_MAX;
}


возвращает результат 'UINT_MAX' при вызове 'foo(UINT_MAX)', в то время как правильный результат — '0'.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.