Ужаснулся ктулхакам в своём коде и попытался переделать правильно (обезъянничая за исходниками RTL).
Падало страшно, пока я не догадался (слоупок), что крашится моя функция формата DieTypeFailed(T, CgeFormat(RuEn('Базовый тип %0 ещё не зарегистрирован.', 'The base type %0 is not registered.'), [BaseType^.Name])); , давясь ShortToUtf16(ShortString(V.VString^)), оттого, что в BaseType вместо нормального PTypeInfo попадал какой-то фтагн (ненулевой, самка собаки).
И вот я вспомнил, что мой фхтагнокод шёл с одинаковым успехом в 2.6.4 и в 3.0.4 без модификаций и адаптировал его к 3.2 тупо вставив ему в жопу ^ (а заодно добавив поддерживание выравниваний, ибо на малине без них упадёт).
И тогда мой движок, собранный 3.2, наконец, запустился и пошёл. То есть, проблема была в одном этом ктулхаке.
Всё работает
 
 Но... Мои глаза!
 
 - Код: Выделить всё
- // Ктулхакус хорриблус.
 function GetArrayBaseTypePti(pai: PTypeInfo): PTypeInfo;
 var
 ti : pointer;
 begin
 ti:= pai;
 inc(PByte(ti), ord(pdynarraytypeinfo(ti)^.namelen) + 2);
 {$if (FPC_FULLVERSION<30000)}
 // fpc 2.6.4
 // NO alignment check because should only be used for legacy Win32
 
 Result:= PTypeInfo(pointer(pdynarraytypeinfo(
 pointer(ti) + sizeof(sizeint)))^);
 {$else}
 {$if (FPC_FULLVERSION<30200)}
 // fpc 3.0.4
 {$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
 ti:= aligntoptr(ti);
 {$endif}
 //Нихрена. Крашится. Result:= PTypeInfo(pdynarraytypedata(ti)^.elType);
 
 // the same as 2.6.4
 Result:= PTypeInfo(pointer(pdynarraytypeinfo(
 pointer(ti) + sizeof(sizeint)))^);
 {$else}
 // fpc 3.2+
 {$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
 ti:= aligntoqword(ti);
 {$endif}
 //А вот... фиг. Крашится: Result:= PPTypeInfo(pdynarraytypedata(ti)^.elType)^;
 Result:= PPTypeInfo(pointer(pdynarraytypeinfo(
 pointer(ti) + sizeof(sizeint)))^)^;
 // Но это же ужас какой-то там tdynarraytypedata это запись
 // с очень сложным условием упакованная/не упакованная!
 // А если оно на 64-битном арме, когда доползу, опять начнёт падать?
 {$endif}
 {$endif}
 Result:= ResolveTypeInfoToAlias(Result); // это моя подставлялка typeinfo(double) для TDateTime и прочая
 end;
З.Ы. Продолжающаяся поддержка 2.6.4 нужна для возможности легаси сборок под Windows 98. Ибо ничто не демонстрирует твою шизанутость, как...






 
 