roboforum.ru

Технический форум по робототехнике.

Opensourece такой Opensourece (GCC)

Opensourece такой Opensourece (GCC)

Aseris » 19 июн 2018, 15:04

GCC компилятор анализирует варнинги и веселости кода в зависимости от уровня оптимизации.
Очень весело его было заставлять делать даную фичу "gcc failing to warn of uninitialized variable"
для кода:

static uint32_t CompilerWarningsTest(uint32_t input)
{
uint32_t result;

if ( input > 0 )
{
result = 10;
}

return result;
}

Но ет все лирика, грабли в том что в зависимости от включеного уровня оптимализации ( -Os/-O3 / -Of ) различается количество варнингов в коде :cry: хотя -Wall -Wextra включены.

Очень неприятно найти ет перед релизом.

Вобщем при анализе кода хорошо его гонять при разых вариантах оптимизации, как я понял некоторый анализ включается ток при использовании алгоритмов оптимизации, и на флаги варнингов оно плюет с высокой горки :(.
Последний раз редактировалось Aseris 19 июн 2018, 18:56, всего редактировалось 1 раз.

Re: Opensourece такой Opensourece (GCC)

Dmitry__ » 19 июн 2018, 18:05

Ничего не понял (про наезд на gcc). Но сам код глупый :)
Если input <= 0, то надо возвращать неинициированную переменную. Надо, таки, "uint32_t result" как-то инициировать, если в коде присутствуют не все проверки.
Так надо:
Код: Выделить всёРазвернуть
  if ( input > 0 )
  {
    result = 10;
  }
  else
  {
    result = 0;
  }

Re: Opensourece такой Opensourece (GCC)

Aseris » 19 июн 2018, 18:14

Код специально чтоб сгенерировать ворнинг. Но gcc 6.3.1 в Attolic True Studio его генерить нехочет.
Последний раз редактировалось Aseris 19 июн 2018, 18:15, всего редактировалось 1 раз.

Re: Opensourece такой Opensourece (GCC)

Dmitry__ » 19 июн 2018, 18:15

А в чем грабля-то? Ну мелкий косяк...

Re: Opensourece такой Opensourece (GCC)

Aseris » 19 июн 2018, 18:26

А грабля что когдато он ет делал, плюс ет моветон что от уровня оптимизации он генерит разные варнинги. Что с учетом разношерсной команды кодописателей становится грусно. нужно MISRA чекер из начальства выбивать чтоб более мение в коде быть уверенным.

Добавлено спустя 8 минут 23 секунды:
В ту же копилку для тестов, мож кому надо, должно генерить варнинг про некоректное поведение, неработает при -Og и -O0, работает при -O3
Код: Выделить всёРазвернуть
#define A_SIZE 10

uint8_t array[A_SIZE ];


void TestFunc(void)
{
uint32_t index
for ( index = A_SIZE ; index > 0; index-- )
{
    array[index-1] = array[index-2];
}
}


Ворнинг про то что лезем мимо масива, неработает при -Og и -O0, работает при -O3
Код: Выделить всёРазвернуть
uint8_t array[A_SIZE ];

array[A_SIZE ] = 0;


Мож я конечно гдето чтото в мануале недочитал...

Re: Opensourece такой Opensourece (GCC)

Dmitry__ » 19 июн 2018, 18:29

Ну, вроде, об этом косяке на всех углах кричат :)
Косяк как из неизлечимых, типа "пишите нормально программы" :)
https://gcc.gnu.org/ml/gcc-bugs/2010-12/msg00978.html
https://stackoverflow.com/questions/177 ... d-variable
http://howtucode.com/gcc-failing-to-war ... 73348.html
http://qaru.site/questions/409336/gcc-f ... d-variable

Re: Opensourece такой Opensourece (GCC)

Angel71 » 19 июн 2018, 18:34

студия, гнуарм. C11 (-std=c11), оптимизация o0, ничего. меняем варнинг лэвэл с Default на Pedantic (-Wall -Wextra -Wpedantic)
Код: Выделить всёРазвернуть
1>Src\main.c(119,11): warning :  unused variable 'ii' [-Wunused-variable]
1>  uint32_t ii = CompilerWarningsTest(0);

переключаемся на og
Код: Выделить всёРазвернуть
1>Src\main.c(119,11): warning :  unused variable 'ii' [-Wunused-variable]
1>  uint32_t ii = CompilerWarningsTest(0);

:)

Re: Opensourece такой Opensourece (GCC)

Aseris » 19 июн 2018, 18:39

Ну грабель в том что за время проекта я даный варнинг встречал, правда проекту уже 3 года и нчинался он на IDE v 5.0 ...шас уже 9.0.1, и после обновлений верил то что существующие фичи никто трогать небудет и в выпрямление рук у сотрудников и сильно код не проверял после кром код ревю.

"пишите нормально программы" и где такой персонал дают? :beer:

Добавлено спустя 2 минуты 6 секунд:
Angel71 писал(а):студия, гнуарм. C11 ...
:)

Все клас, :D ток оно должно варнинг дать внутри функции на uint32_t result;

unused и uninitialized разные весчи, да и к оптимизации другой паровоз варнингов относитися

Re: Opensourece такой Opensourece (GCC)

Angel71 » 19 июн 2018, 18:43

а, тфу блин. ii анюсед. ну дя, не выругалось. :pardon: тады ойсь.

Re: Opensourece такой Opensourece (GCC)

Aseris » 19 июн 2018, 18:55

Вобщем при анализе кода хорошо его гонять при разых вариантах оптимизации, как я понял некоторый анализ включается ток при использовании алгоритмов оптимизации, и на флаги варнингов оно плюет с высокой горки :(.

Re: Opensourece такой Opensourece (GCC)

Dmitry__ » 19 июн 2018, 19:01

Aseris писал(а):как я понял некоторый анализ включается ток при использовании алгоритмов оптимизации, и на флаги варнингов оно плюет с высокой горки .

Ага, об этом говорят в моих ссылках.

Aseris писал(а):"пишите нормально программы" и где такой персонал дают?

Да фиг его знает :)
Я все пишу с нулевым уровнем оптимизации. Если становится тесно, тогда только начинаю мучить gcc. А вообще, в последнее время - быдлокодю жестко, заработало, ну и ладно :)

Re: Opensourece такой Opensourece (GCC)

Angel71 » 19 июн 2018, 19:12

статические анализаторы кода на подобии https://www.viva64.com/ru/pvs-studio/ подходят? на рутрекере некоторые вещи есть для попробовать.
:ROFL: варнинги и бяко-код это всё фигня. вот когда чип дерьмо глюкаво-недокументированное, вот это сила. грё mpu-9255...

Re: Opensourece такой Opensourece (GCC)

Aseris » 19 июн 2018, 19:18

Статические анализаторы я и назвал MISRA чекер. Попробовать мне ненадо я с ними работал, но обычно все упирается в то что пока петух не клюнет руководство фиг деньги на лицензию даст, типа вы умные вы справитесь....но ет уже другие грабли... нужно завести скебе соглашение с рисками для руководства, и требовать подпись кровью чоб потом небыло а вы нам не говорили (по несколько раз на планерках) что без той штуки риски больше...

Re: Opensourece такой Opensourece (GCC)

Angel71 » 19 июн 2018, 19:28

с новыми правилами вроде с записью видео не забалуешь - и так и так подпись клянчить. ну не переживай, некоторые насяльники могут себе позволить фразы "эт ты специально чтот ломаешь, что бы потом чинить" (знакомому недавно такое выдали, сильно задумался о смене места работы).

Re: Opensourece такой Opensourece (GCC)

Aseris » 19 июн 2018, 19:32

... мнда все еше веселеее...

Код: Выделить всёРазвернуть
...
for(i = 0; i < count; i++ )
{
   ReadNormalEvent((uint32_t)eventIndex-i, &event);
   if((event.eventNumber == eventTmp.eventNumber) && (i > 0) )
   {
     break;
   }
   memcpy( &eventTmp, &event, sizeof(Event_t) );
...
}


здесь оно в другой ветви проекта генерит варнинг

'eventTmp.eventNumber' may be used uninitialized in this function [-Wmaybe-uninitialized]

но блин проверочную функцию (из шапки) игнорит..
Осваивать чели багтрекер GCC :cry: ....


Rambler\'s Top100 Mail.ru counter