Jump to content

    

Не могу собрать OpenOCD. Linux Mint 19

Сергей Борщ, для gcc даже несколько вариантов комментариев есть:

/* Falls through. */
/* fall-thru */
/* Else falls through. */
/* FALLTHRU */
/* … falls through … */

Вот статья об этом: https://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/

Share this post


Link to post
Share on other sites
1 час назад, one_eight_seven сказал:

Clang и ICC это тоже поддерживают? Или городить #ifdef __GNUC__, и т.п.?

Давайте не будем обобщать. Напоминаю, речь идёт о Минте, а там штатный компилятор gcc. У автора наверняка тоже используется gcc, вот для gcc и надо написать то, что он воспримет.

1 час назад, one_eight_seven сказал:

отсутствие break - это не есть неправильный код. Это задокументированная возможность языка.

С этим никто не спорит. Но отсутствие break может быть ошибкой. Если компилятор увидит в этом месте fallthrough в понятном ему виде, он удостоверится, что отсутствие break в этом месте не ошибка, и никаких варнигов выдавать не станет.

Это нужно не только компилятору, а и человеку, читающему код.

Share this post


Link to post
Share on other sites
Quote

Давайте не будем обобщать. Напоминаю, речь идёт о Минте

Напоминаю, речь идёт об openOCD и его сборке из исходников, а не об его установке из пакетов в Linux Mint.

Edited by one_eight_seven

Share this post


Link to post
Share on other sites
45 минут назад, one_eight_seven сказал:

Напоминаю, речь идёт об openOCD и его сборке из исходников, а не об его установке из пакетов в Linux Mint.

Стесняюсь спросить, кто ведет речь об установке пакета?

Share this post


Link to post
Share on other sites
40 минут назад, one_eight_seven сказал:

Напоминаю, речь идёт об openOCD и его сборке из исходников, а не об его установке из пакетов в Linux Mint.

+1.

А что при сборке старыми версиями GCC, скажем, 4.9.x? Они будут понимать новые атрибуты и комментарии? Не говоря уже о других тулчейнах.

Вообще-то по-хорошему мантайнер пакетов конкретного дистрибутива должен патчить пакет. Вот он и должен решать, что именно: Makefile или исходный код. В данном случае ТС собирает проверенный релиз. Если он начнет патчить исходники, то где гарантия что при копипасте не допустит ошибку и не изменит логику программы в этих switch? Напоминаю, что он не мантайнер, а собирает пакет для своей профильной работы. Исходя из этого, безопаснее отключить данную ошибку, переведя её в разряд предупреждений, чтобы всё-таки видеть потенциальную опасность.

Share this post


Link to post
Share on other sites
12 minutes ago, andrew_b said:

Стесняюсь спросить, кто ведет речь об установке пакета? 

Полагаю, что тот, кто считает, что слова "Linux Mint" хоть что-то значат в рамках текущего разговора.

 

11 minutes ago, Grizzly said:

А что при сборке старыми версиями GCC, скажем, 4.9.x? Они будут понимать новые атрибуты и комментарии?

Ну, с комментариями-то вообще никаких проблем не будет, новый gcc их воспримет как директиву, старый - как простой комментарий, только вот старый и ворнинга на отсутствие break  не выдаст. А чтобы комментарии воспринимались (новым) gcc при обработке fallthrough, всё-равно нужно устанавливать уровень соответствующего warning'а в соответствующее значение, т.е. изменять параметры сборки. А аттрибут - неизвестно как будет воспринят.

Edited by one_eight_seven

Share this post


Link to post
Share on other sites
7 минут назад, one_eight_seven сказал:

Полагаю, что тот, кто считает, что слова "Linux Mint" хоть что-то значат в рамках текущего разговора.

Гхм.

Читаем саааамое начало топика:

16 часов назад, nanorobot сказал:

Перешел на линкс минт 19, до этого была 18.  Имею набор проблем, среди них  много раз ранее выполнявшаяся, и никогда не вызывавшая проблем, сборка OpenOCD.

Потом чуть далее:

3 часа назад, andrew_b сказал:

У автора темы произошёл переход на новую версию дистрибутива. Соответственно, обновился компилятор. Наверняка используется gcc. У gcc есть __attribute__((fallthrough)). Вот это и надо вписать там, где нужно, чтобы не было варнингов.

Если старый компилятор не обращал внимание на отсутствие break, то теперь обращает.

Ну и в каком месте тут установка из пакетов?

Share this post


Link to post
Share on other sites
17 minutes ago, andrew_b said:

Ну и в каком месте тут установка из пакетов?

 

1 hour ago, andrew_b said:

Давайте не будем обобщать. Напоминаю, речь идёт о Минте

вкупе с предложением править исходник и отправлять в апстрим мало в каком случае имеет логичное обоснование. Пожалуй, мне трудно придумать логическое обоснование для какого-либо случая, кроме подготовки пакета для Linux Mint.
 

Share this post


Link to post
Share on other sites
3 минуты назад, one_eight_seven сказал:

править исходник и отправлять в апстрим мало в каком случае имеет логичное обоснование

Ну если вы никогда этого не делали, то для вас это никак не обосновать. Окей, с пониманием.

3 минуты назад, one_eight_seven сказал:

для какого-либо случая, кроме подготовки пакета для Linux Mint.

Вы понимаете, что пакет для Минт, пакет для Федоры, пакет для миллионов других дистрибутивов собирается из одних и тех же исходников? Что апстрим на то и апстрим, что он один для всех. Видимо, нет. Иначе мне непонятны ваши посты здесь.

Но в любом случае, мне надоело расписывать здесь очевидные вещи. До свидания.

Share this post


Link to post
Share on other sites
1 час назад, one_eight_seven сказал:

А чтобы комментарии воспринимались (новым) gcc при обработке fallthrough, всё-равно нужно устанавливать уровень соответствующего warning'а в соответствующее значение, т.е. изменять параметры сборки.

Нет, не нужно, это работает из коробки. Добавление специального комментария подавляет это предупреждение в новом ГЦЦ и, как и любой другой комментарий, никак не влияет ни на старый, ни на любой другой компилятор. И поскольку исходники openOCD рано или поздно будут собираться новым ГЦЦ в любом дистрибутиве и даже для винды - это исправление нужно отправить официальным путем в исходники openOCD. Или ждать, пока это сделает кто-то другой (Царь-батюшка, правительство, дворник, сосед?) и ныть, как все плохо (это я не про конкретных людей, а так вообще, о тенденции).

Share this post


Link to post
Share on other sites
Цитата

Что апстрим на то и апстрим, что он один для всех. Видимо, нет. Иначе мне непонятны ваши посты здесь.

Это вы этого не понимаете. Это вы сказали, что не надо обобщать. Это вы сказали, что речь только про mint. И не надо пытаться удалиться с гордым видом и [удалено].
Именно потому что он один на всех - нельзя ставить аттрибут без обкладывания его директивами условной компиляции. Именно потому что он один для всех - надо думать и про старые gcc, и про icc, и про clang, и про винду, и про freeBSD.

Комментарии - другое дело.

Edited by Сергей Борщ
предупреждение за нарушение пункта 2.1б Правил форума.

Share this post


Link to post
Share on other sites
6 часов назад, arhiv6 сказал:

В багтрекере уже описано, в репозитории уже исправлено.

Спасибо за ссылки. Увидел, как комментарии исправляют проблему. В таком случае надо патчить исходники, с этим согласен.

Share this post


Link to post
Share on other sites
On 11/27/2018 at 1:31 PM, nanorobot said:

Перешел на линкс минт 19, до этого была 18.  Имею набор проблем, среди них  много раз ранее выполнявшаяся, и никогда не вызывавшая проблем, сборка OpenOCD. Сейчас make завершается с ошибками:


src/svf/svf.c: In function ‘svf_read_command_from_file’:
src/svf/svf.c:663:7: error: this statement may fall through [-Werror=implicit-fallthrough=]
     i = -1;
     ~~^~~~
src/svf/svf.c:664:4: note: here
    case '\r':
    ^~~~
src/svf/svf.c:667:8: error: this statement may fall through [-Werror=implicit-fallthrough=]
     if (!cmd_pos)
        ^
src/svf/svf.c:669:4: note: here
    default:
    ^~~~~~~
cc1: all warnings being treated as errors

гугл что то по этой теме находит, но проблему решить не удается.

ЕЩЕ: сборка buildroot для платы SL-ATSAMA5D3 также завершается с ошибкой ранее не встречавшейся.
 


ACC conformance test FAILED

Догадываюсь что проблемы родственные, какие то несовместимости с новым GCC, но так бывало (со сборкой билдрут) и ранее, но совсем то  в тупик еще не заводило.

В Makefile где-то стоит опция Werror. Просто уберите ее и будет вам щастя.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this