LINUX.ORG.RU

Это глюк!

У меня он выдет Floating exception и на gcc (GCC) 3.2 под Линухом,
и на gcc 2.95.3 под Альфой (64 бита!)

На родном Компаковском компилере все работает как надо:

#include <stdio.h>
int main(void)
{
  int a = 0x80000000;
  int b = -1;
  int c;

  c = a/b;

  printf( "c=%d a=%d\n",c,a);

  return 0;
}

c=-2147483648 a=-2147483648

Баг gcc!

Die-Hard ★★★★★
()

[0][lg:pu][~/prog]$ cat lala.c
int main(void)
{
int a = 0x80000000;

return a/-1;
}
[0][lg:pu][~/prog]$ make lala
cc -O -pipe lala.c -o lala
lala.c: In function `main':
lala.c:6: Internal compiler error in `float_signal', at toplev.c:2428
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/bugs.html>; for instructions.
*** Error code 1

Stop in /usr/home/lg/prog.
[1][lg:pu][~/prog]$ gcc -v
Using builtin specs.
gcc version 2.95.3 20010315 (release) [FreeBSD]


:))

lg ★★
()

> Это глюк!

Да ну :-)

Что, получается, что согласно компаковскому компилятору INT_MIN / -1 == INT_MIN? Это правильно?

anonymous
()

> INT_MIN / -1 == INT_MIN? Это правильно?
Ну, вообще-то, нет - но переполнение целого обычно никак не контролируется.
Конечно, логичнее было бы 0.

Die-Hard ★★★★★
()

Ну, вообще-то, насколько я понимаю, это единственная ситуация, когда происходит ексепция такого рода, это вроде бы даже как в интелевской спецификации по процессорам написано - но это не точно, я только слышал что-то подобное. В виндах тоже кидается исключение, но integer overflow.

anonymous
()

Вот, и, кроме того, гсс тут не причем. Можно нашкрябать такой сампл на асме, будет тоже самое. Контрольное слово должно быть 0x27F.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.