Где Warning: Function result does not seem to be set ?

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

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

Где Warning: Function result does not seem to be set ?

Сообщение Дож » 28.10.2018 06:02:58

Программа:
Код: Выделить всё
function TestALessThan5(A: LongInt): Boolean;
begin
  if A >= 5 then
    Exit(False);
end;

begin
  Writeln(TestALessThan5(0));
end.

Компиляция:
Код: Выделить всё
D:\data\temp>fpc -Sew e.pas && e.exe
Free Pascal Compiler version 3.0.4 [2017/10/06] for i386
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling e.pas
Linking e.exe
9 lines compiled, 0.0 sec, 25424 bytes code, 1252 bytes data
FALSE

Почему строгий компилятор, так старательно защищающий меня от отстрела ноги (в отличии от всяких других, нехороших компиляторов), не выдал варнинга? Это баг?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Где Warning: Function result does not seem to be set ?

Сообщение Sergei I. Gorelkin » 28.10.2018 06:45:51

"-Oodfa" в командную строку добавь...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Где Warning: Function result does not seem to be set ?

Сообщение Дож » 28.10.2018 07:32:41

Потрясающе, спасибо! Есть ли у этого решения побочные эффекты?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Где Warning: Function result does not seem to be set ?

Сообщение скалогрыз » 28.10.2018 08:58:27

Дож писал(а): Есть ли у этого решения побочные эффекты?

у меня на старых версиях компилятора при сборке LCL с -Oodfa вылазили internalerror
сам по себе -Oodfa это анализатор кода (без оптимизации), ключается при -О2 и выше.
(т.е. например, если у тебя есть оптимизация -Oodfa уже включена).

Так что кроме (иногда параноидальных) предупрждений, побочных эффектов быть не должно. Да, наверное, компиляция медленнее (на N-нано секунд?!).

в 2016 году предлагал включать флаг по-умолчанию для всех проектов лазаруса.
Был послан двумя обоснованиями:
1) http://wiki.freepascal.org/FPC_New_Feat ... limination
"This optimization is currently not enabled by default at any optimization level because -Oodfa is still a work in progress. You can enable the optimization individually using the -Oodeadstore command line option, or by adding {$optimization deadstore} to your source file."

2) В лазарусе итак можно добавить ключит глобально.
http://wiki.lazarus.freepascal.org/IDE_ ... d_packages

Сейчас 2018 год, допилен ли -Oodfa до состояния, что компилятор держит его включённым по-умолчанию, похоже что нет.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Где Warning: Function result does not seem to be set ?

Сообщение Дож » 28.10.2018 11:25:23

Я, кстати, замечал, что когда делаю релизные билды (-O3) вылезают варнинги, которых раньше не было, теперь понятно в чём дело.

Получается, что везде у себя нужно использовать -Oodfa
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47


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

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

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

Рейтинг@Mail.ru