Привет всем!
У меня объявлена процедура и при попытке проверить данную процедуру при оптимизации O2 выдаёт ошибку:
Error: Illegal type conversion: "untyped" to "LongWord"
если производить компиляцию при оптимизации O1 то компилируется всё нормально. Данная ошибка возникает при компиляции проектов Android с архитектурами
x86(i386)/arm32(armv7a). Если компилировать под архитектуры
x86_64/ARM64(aarch64) и выставить O2, то таких проблем не возникает.
Если использовать FPC 3.2.2 с оптимизацией O2, таких проблем тоже нет ни с одной из всех четырёх архитектур.
Код и параметры системы выкладываю ниже.
Большая просьба, не надо мне писать, чтоб я использовал то что работает. Я делаю программу для общего пользования и стараюсь чтоб на большинстве используемых людьми компиляторов, ошибок не возникало. Если это ошибка компилятора, то пожалуйста исправьте её. Я специально проверил на двух разных системах, так как часто встречаюсь с ошибками, которые могут проявляться на одной ОС и не проявляться в другой.
Google translate:
Hello everyone!
I have a procedure declared and when I try to check this procedure during optimization O2 gives an error:
Error: Illegal type conversion: "untyped" to "LongWord"
if you compile with O1 optimization, everything compiles fine. This error occurs when compiling Android projects with
x86(i386)/arm32(armv7a) architectures. If you compile for
x86_64/ARM64(aarch64) architectures and set O2, then such problems do not arise.
If you use FPC 3.2.2 with O2 optimization, there are no such problems with any of the four architectures.
I am posting the code and system parameters below.
Please, don't tell me to use something that works. I'm making a program for general use and I try to make sure that errors don't occur on most compilers that people use. If this is a compiler error, please fix it. I specifically tested it on two different systems because I often encounter errors that may appear on one OS and not on another.
OS: Debian 11/12
FPC 3.3.1
...
var
SetUserMode: procedure;
...
procedure NNNN;
begin
...
if Assigned(SetUserMode) then // <-- error
...
end;