Глюки System.Round в win64

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Глюки System.Round в win64

Сообщение Сквозняк » 03.10.2019 01:35:30

Имеется такой бенчмарк :D
Код: Выделить всё
var
Q2,W2: LONGINT;
Q3:BYTE;

CONST
KUKIS_X=120;
KUKIS_Y=141;
LAZA=141;
LAZA2=14;

BEGIN
Q3:=1;
W2:=ROUND(141);
W2:=ROUND(123456789);
Q2:=W2-ROUND(KUKIS_Y*13);
Q2:=Q2-ROUND(KUKIS_X*Q3);
Q2:=Q2-ROUND(141*Q3);     //ГЛЮЧИТ
Q2:=Q2-ROUND(KUKIS_Y*Q3); //ГЛЮЧИТ
Q2:=ROUND(LAZA*Q3);       //ГЛЮЧИТ
Q2:=ROUND(LAZA2*Q3);
Q2:=W2-ROUND(KUKIS_X*Q3);
Q2:=W2-ROUND(KUKIS_Y*13);
END.


Собираю его так
Код: Выделить всё
wine cmd.exe /c "C:\lazarus-1.4.4-fpc-2.6.4-win64\fpc\2.6.4\bin\x86_64-win64\fpc.exe -FuC:\lazarus-1.4.4-fpc-2.6.4-win64\fpc\2.6.4\units\x86_64-win64\*" 1.pp

и получаю такую ругань:
Код: Выделить всё
Free Pascal Compiler version 2.6.4 [2015/10/04] for x86_64
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Win64 for x64
Compiling 1.pp
1.pp(17,8) Error: Can't determine which overloaded function to call
1.pp(18,8) Error: Can't determine which overloaded function to call
1.pp(19,5) Error: Can't determine which overloaded function to call
1.pp(25) Fatal: There were 3 errors compiling module, stopping
Fatal: Compilation aborted
Error: C:\lazarus-1.4.4-fpc-2.6.4-win64\fpc\2.6.4\bin\x86_64-win64\ppcx64.exe returned an error exitcode (normal if you did not specify a source file to be compiled)

2.6.4 win64 компилятор как-то болезненно реагирует на перемножение константы и числа со значением 141 при вызове функции. Что здесь не так и исправлено ли это на более новых версиях компилятора?
Сквозняк
энтузиаст
 
Сообщения: 705
Зарегистрирован: 29.06.2006 22:08:32

Re: Глюки System.Round в win64

Сообщение Vadim » 03.10.2019 06:30:50

Сквозняк
3.0.4. в Линуксе никаких ошибок не выдаёт.
А компилировать обязательно нужно именно таким, крайне извращенским, способом?
Vadim
долгожитель
 
Сообщения: 3819
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Глюки System.Round в win64

Сообщение Сквозняк » 03.10.2019 07:55:32

Так в линуксе и у меня ошибок не выдавало, и в вин 32 тоже всё нормально было. Тоже таким способом собирал, только компилятор был из 32 битного лазаруса. А как стал собирать код для платформы вин 64, так эта ошибка и вылезла. Удалось засунуть её в коротенький код. Его можно ещё укоротить - там самые главные строки помечены. Сначала думал что компилятор реагирует на ключевое слово верхний "кукиш", записанное транслитом. Но оказалось, что цифры там важнее. У меня в линуксе сборка для win64 только таким способом сейчас настроена, про то, как будет проходить сборка в реальной винде или виртуалке - не в курсе. Пока удалось воспроизвести только через сборку через вайн лазарусным компилятором.
Сквозняк
энтузиаст
 
Сообщения: 705
Зарегистрирован: 29.06.2006 22:08:32

Re: Глюки System.Round в win64

Сообщение Vadim » 03.10.2019 09:22:52

Сквозняк
Ага, понятно...
Сейчас попробовал уже в винде компилить 64-ех разрядным FPC 3.0.4 - вылезла та же ошибка.
Vadim
долгожитель
 
Сообщения: 3819
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Глюки System.Round в win64

Сообщение Снег Север » 03.10.2019 12:50:42

Если написать типа
Q2:=Q2-ROUND(Integer(141*Q3));
то всё в порядке.
Не знаю баг ли это или фича.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2252
Зарегистрирован: 27.11.2007 16:14:47

Re: Глюки System.Round в win64

Сообщение Vadim » 03.10.2019 13:01:45

Снег Север
Это непонятно что... :D
Если написать вот так:
Код: Выделить всё
var
    Q2: LONGINT;
    Q3:BYTE;

CONST
    KUKIS_Y=LONGINT(141);

BEGIN
    Q3:=1;
    Q2:=Q2-ROUND(KUKIS_Y*Q3); //ГЛЮЧИЛО когда-то...
END.

то тоже не глючит... :-)
Vadim
долгожитель
 
Сообщения: 3819
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Глюки System.Round в win64

Сообщение Сквозняк » 03.10.2019 15:15:50

Если это работает и на новых компиляторах, то надо писать письмо счастья в багтрекер :mrgreen:
https://bugs.freepascal.org/view.php?id=36133
Сквозняк
энтузиаст
 
Сообщения: 705
Зарегистрирован: 29.06.2006 22:08:32

Re: Глюки System.Round в win64

Сообщение Vadim » 03.10.2019 16:46:22

Сквозняк
Надо чтобы написал кто-то, кто владеет английским в объёме больше чем "Fuck you, very much!"... :D
Vadim
долгожитель
 
Сообщения: 3819
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Глюки System.Round в win64

Сообщение Сквозняк » 03.10.2019 17:28:37

Увы, таковые молчат.
Сквозняк
энтузиаст
 
Сообщения: 705
Зарегистрирован: 29.06.2006 22:08:32


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru