Автор Тема: [BlackBox] Compiler trap.  (Прочитано 35250 раз)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #90 : Май 24, 2013, 10:56:05 pm »
Я видел. Но пример таки отличаются (кстати, обратите внимание на капс в Аде-83 :-) ).

Кроме того, атрибутов про выравнивание там, в Аде-83, похоже не было.

Собственно в этих двух примерах было показано:

for Program_Status_Word use
  record
    ...
for Program_Status_Word'Alignment use 8;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
for PROGRAM_STATUS_WORD use
  record at mod 8;
    ...  ^^^^^^^^
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Compiler trap.
« Ответ #91 : Май 25, 2013, 02:53:22 am »
Возвращаясь к топику:
недавно еще один товарищ похоже напоролся ровно на тот же трап:

...
    x := OPB.NewUnsignedConst( (LONG(y^.conval^.intval) -apar^.conval^.intval) DIV z^.conval^.intval + 1)могло возникнуть переполнение в разности (y^.conval^.intval-apar^.conval^.intval), что искажало результат при последующем делении. Попытка перейти к типу большей разрядности при помощи LONG() вызывало ТРАП 0 (Dev)CPC486 компилятора ББ.

...

Интересно, что попытка соединить в одном операторе и разность и деление
L := (LONG(y^.conval^.intval)  -apar^.conval^.intval) DIV  z^.conval^.intval  +1;
вызывает ТРАП 0 (Dev)CPC486 компилятора ББ! Ну и ладно, не хочет вместе, посчитаем по отдельности.
Y = λf.(λx.f (x x)) (λx.f (x x))

Oleg N. Cher

  • Full Member
  • ***
  • Сообщений: 152
    • Просмотр профиля
    • Оберон-клуб «VEDAsoft»

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Y = λf.(λx.f (x x)) (λx.f (x x))