Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[C99] gcc et fonctions 'inline'

33 réponses
Avatar
JKB
Bonjour à tous,

Je suis en train de modifier les sources d'un programme pour le
rendre compilable par un compilo C99 (une en-tête moisie de Solaris
demande C99 dès que _POSIX_C_SOURCE est défini avec une valeur
supérieure ou égale à 200112L, contrairement aux autres systèmes que
j'ai sous la main). J'ai eu quelques problèmes avec 'inline' mais là, ça
compile correctement.

En revanche, j'ai un tas de warnings du type :

rpl.conv.h:2811: warning: inline function ‘librpl_write_atomic’ declared
but never defined
rpl.conv.h:2809: warning: inline function ‘librpl_read_atomic’ declared
but never defined
rpl.conv.h:2589: warning: inline function ‘librpl_scrutation_injection’
declared but never defined
rpl.conv.h:2477: warning: inline function ‘librpl_analyse_instruction’
declared but never defined

et j'en passe qui me polluent allègrement les logs de compilation.
Ça ne correspond pas à une erreur, j'ai un fichier d'en-tête qui
reprend toutes les fonctions 'inlinées', fonctions qui ne sont pas
utilisées dans tous mes fichiers de sources.

Je viens de lire (plusieurs fois) la doc de gcc et je n'ai pas
trouvé d'option empêchant l'affichage de ce genre de warning.
J'aimerais autant ne pas voir ces warnins qui ne sont pas des
erreurs pour mieux voir ce qui pourrait poser problème...

Une idée ?

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.

10 réponses

1 2 3 4
Avatar
espie
In article <hsh9nd$2b3h$, Marc wrote:
Marc Espie wrote:
Apres, tu t'etonnes moins qu'il y ait des patchs non committes pour gcc sur
a peu pres toutes les archis un peu obscures: il y a tellement de red tape
au niveau de la FSF qu'une grosse partie des developpeurs opensource ont
totalement laisse tomber (rappel: on fait ca pour le fun, si on doit se
taper un process qui est encore plus chiant que celui de la SSII moyenne...)



C'est un aspect révélateur de ta conception des choses, tu parles de
"développeur opensource" pour désigner les hobbyists, alors que la
majorité est professionnelle (ie payée pour, je ne fais pas de jugement
sur la qualité du boulot).



Ben c'est totalement anormal, justement. Le mouvement opensource, c'est
quand meme que tout le monde a acces et peut travailler dessus. T'as
qu'a lire les ecrits d'ESR par exemple.

Si ca se professionnalise et que ca devient difficile, voire impossible
de contribuer, c'est qu'il y a un gros probleme.

Contrairement a ce que tu penses, ca n'est absolument pas la norme des
developpements opensource. Il est relativement facile de communiquer et de
contribuer avec les gens de KDE ou de sqlite, ou de perl, pour parler de
ce que je connais directement. Meme des logiciels developpes par des grosses
boites, comme qt chez nokia ou cmake chez kitware, constituent des
environnements de developpement plus agreables pour un developpeur externe.

Bref, j'arrive a collaborer avec la majorite des projets auxquels je
m'interesse. Les machins FSF, gcc en tete, constituent l'exception
majeure...

de plus en plus dependant d'autres outils gnu (par exemple, il reclame
gmake pour bootstrapper... tous les bsd ont du reverse-engineerer ca pour
faire un systeme de build sans gmake. Et on s'est vu opposer une fin de
non-recevoir a chaque fois qu'on a essaye d'enlever des gnu-makeries du
makefile officiel)...



Parce qu'aucun outil BSD n'utilise les extensions du make BSD ? Tant
qu'ils font l'effort que gmake soit portable...



C'est pas tres dur de faire des Makefile portables, et quand c'est pas des
trucs internes a l'arbre, c'est ce qui est fait le plus souvent...


Pour le reste, Antoine demande pourquoi la situation est comme ca, je lui
dis.

Bon, a cote de ca, tu reconnais que tu n'as meme pas fini la premiere etape
(copyright assignment)... la suite est pire, comme tu pourras le voir
toi-meme. :(

Il y a des tonnes de trucs dans ton message sur lesquels je ne commenterai
pas. Toute la base de mon message, c'est juste d'expliquer qu'apres avoir
essaye de contribuer des trucs quelques annees directement a gcc, j'ai
laisse tomber cet aspect-la. Ca demande une quantite d'energie
invraisemblable pour un resultat mediocre. Au final, c'est effectivement
bien plus simple d'avoir un fork local de gcc dans son BSD, et c'est comme
ca qu'a peu pres tout le monde fonctionne.
Avatar
Marc
Marc Espie wrote:
In article <hsh9nd$2b3h$, Marc wrote:
C'est un aspect révélateur de ta conception des choses, tu parles de
"développeur opensource" pour désigner les hobbyists, alors que la
majorité est professionnelle (ie payée pour, je ne fais pas de jugement
sur la qualité du boulot).



Ben c'est totalement anormal, justement. Le mouvement opensource, c'est
quand meme que tout le monde a acces et peut travailler dessus. T'as
qu'a lire les ecrits d'ESR par exemple.

Si ca se professionnalise et que ca devient difficile, voire impossible
de contribuer, c'est qu'il y a un gros probleme.



Euh, le fait que ça se professionnalise et la difficulté à contribuer
sont 2 choses différentes. D'ailleurs tu cites toi-même les exemples de
cmake et Qt (même si personnellement j'ai trouvé plus facile de
contribuer à gcc que Qt, mais les 2 datent un peu).

Je ne vois pas de problème en soi à ce que des développeurs soient payés
pour écrire du code libre.
Avatar
espie
In article <hshbnj$2m1d$, Marc wrote:
Marc Espie wrote:
In article <hsh9nd$2b3h$, Marc wrote:
C'est un aspect révélateur de ta conception des choses, tu parles de
"développeur opensource" pour désigner les hobbyists, alors que la
majorité est professionnelle (ie payée pour, je ne fais pas de jugement
sur la qualité du boulot).



Ben c'est totalement anormal, justement. Le mouvement opensource, c'est
quand meme que tout le monde a acces et peut travailler dessus. T'as
qu'a lire les ecrits d'ESR par exemple.

Si ca se professionnalise et que ca devient difficile, voire impossible
de contribuer, c'est qu'il y a un gros probleme.



Euh, le fait que ça se professionnalise et la difficulté à contribuer
sont 2 choses différentes. D'ailleurs tu cites toi-même les exemples de
cmake et Qt (même si personnellement j'ai trouvé plus facile de
contribuer à gcc que Qt, mais les 2 datent un peu).

Je ne vois pas de problème en soi à ce que des développeurs soient payés
pour écrire du code libre.



Ben moi non plus, je parle toujours du sous-texte, que la barriere d'entree
est tres elevee lorsque tu ne bosses pas sur GCC a plein temps ou presque.

C'est toi qui a deduit que je trouvais ca anormal que les gens soient payes.

Je trouve juste anormal que ca soit difficile de jouer avec eux avec moins
de moyens.
Avatar
Antoine Leca
Marc écrivit :
Antoine Leca wrote:
Le seul souci mais il est de taille, ce
sont (encore une fois) les usagers, qui « persistent » en nombre à
vouloir continuer à utiliser le langage C... et cela inclut des gros,
des énormes projets comme Windows. Bref, il faut faire avec.



Je ne suis pas sûr que ce soit le meilleur exemple, puisque microsoft
refuse d'implémenter C99 dans son compilateur C/C++, et ne s'est mis que
très récemment à ajouter des bouts de C99 en tant que C++0X.



Au contraire, le fait est que l'entreprise Microsoft qui en tant que
vendeur de compilateurs est un grand soutien de C++, se trouve aussi en
tant que développeur d'un très gros projet appelé Windows être resté
pour la grande part fidèle à C ; et de fait les compilos de Microsoft
(dans VC++) viennent toujours par paires, comme il y a 20 ans : il y a
deux front-ends (C1) bien différenciés : le compilo C étant celui
utilisé pour Windows...
On a même vu un retour de bâton assez amusant il y a quelques années :
suite à l'épisode CodeRed+Slammer qui a fait un peu de bruit dans
Landerneau, les développeurs de Microsoft ont développé une nouvelle
version « sûre » de la bibliothèque standard ; et ensuite ils --enfin,
les consultants qui ont bossé dessus-- sont allé vendre le résultat au
comité C, avec semble-t-il pas mal de succès !
(au niveau de la vente, cela ne présage rien des « achats » qu'en
feront, ou pas, les usagers dans le futur... là j'ai des gros doutes.)


Antoine
Avatar
espie
In article <hsh9nd$2b3h$, Marc wrote:
Pas encore degoute ? Alors on en ajoute encore. La politique de gcc,
en plus, depuis pas mal d'annees, c'est de ne jamais accepter de patchs
pour la version stable: il faut que tu fasses ton developpement en
-current, fasse accepter le patch en -current... pour apres pouvoir
dire que ton patch est critique, refaire un 2e patch en stable



Ne fais pas semblant de ne pas comprendre pourquoi ils font ça. Il est
gentil ton patch sur une vieille version, mais du coup il ne sera pas
dans la version suivante, donc il sera perdu, c'est la louze. Pour la
difficulté des backports pour une architecture non "prioritaire", je te
crois, mais dans ce cas tu te fais un arbre de sources qui suit la
release en question et où tu ajoutes tes patchs (je suis sûr que les BSD
font déjà ça). Puisque que tu les as mis dans le trunk de gcc, ils seront
dans la prochaine release officielle, et ton projet propose sa propre
version patchée de la vieille version stable. Oui c'est un peu de
travail.



Tiens, je viens de tomber sur un exemple qui illustre bien le souci:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id2544

un bug-report precis, sur une regression qui affecte la branche 4.2* par
rapport a la branche 4.1, et qui a ete corrige en 4.3.

Regarde bien les commentaires et le timeline. Tu as quand meme un bug qui
est reste ouvert (et actif) pendant plus d'un an. Symptome: mesa r300 dri ne
compile pas proprement avec -O2 sur 4.1 (il faut une modification locale pour
desactiver -ftree-vrp). C'est pas vraiment anecdotique comme bug...

Accessoirement, c'est pas note dans le meme bug report, mais -ftree-vrp
casse aussi les builds de jdk/1.5 sur un compilo 4.2...


Au final, le bug a ete ferme. Pourquoi ? pas parce qu'il a ete corrige, mais
parce que la branche 4.3 fait des trucs differemment, et n'exhibe plus le
probleme...

Il y a un cote 'fuite en avant' de style on ne corrige QUE current, et tant pis
pour les gens qui veulent bosser avec un compilo stable pour diverses raisons
(par exemple, parce que les back-ends pour certains processeurs vont souvent
etre tres instables faute de tests dans les branches recentes). Par certains
cotes, on se croirait chez gentoo.

Au final, c'est un modele de developpement qui ne marche bien QUE pour les
gens sur une archi extremement mainstream (donc du i386/amd64) et de preference
sur un linux...

c'est extremement frustrant quand tu es ailleurs.
Avatar
Marc
Marc Espie wrote:

Tiens, je viens de tomber sur un exemple qui illustre bien le souci:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id2544

un bug-report precis, sur une regression qui affecte la branche 4.2* par
rapport a la branche 4.1, et qui a ete corrige en 4.3.



Merci pour l'exemple et les explications, c'est beaucoup plus clair.

Au final, le bug a ete ferme. Pourquoi ? pas parce qu'il a ete corrige, mais
parce que la branche 4.3 fait des trucs differemment, et n'exhibe plus le
probleme...



Enfin il a été fermé quand la branche a été abandonnée, ce qui s'est
produit presque 2 ans après la dernière activité sur ce bug. Donc dans ce
cas très précis, le plus gros problème est qu'en 2 ans personne n'a été
assez motivé/compétent pour corriger le bug. Mais je comprends ce que tu
veux montrer.
Avatar
espie
In article <hsn6h6$p8u$, Marc wrote:
Marc Espie wrote:

Tiens, je viens de tomber sur un exemple qui illustre bien le souci:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id2544

un bug-report precis, sur une regression qui affecte la branche 4.2* par
rapport a la branche 4.1, et qui a ete corrige en 4.3.



Merci pour l'exemple et les explications, c'est beaucoup plus clair.

Au final, le bug a ete ferme. Pourquoi ? pas parce qu'il a ete corrige, mais
parce que la branche 4.3 fait des trucs differemment, et n'exhibe plus le
probleme...



Enfin il a été fermé quand la branche a été abandonnée, ce qui s'est
produit presque 2 ans après la dernière activité sur ce bug. Donc dans ce
cas très précis, le plus gros problème est qu'en 2 ans personne n'a été
assez motivé/compétent pour corriger le bug. Mais je comprends ce que tu
veux montrer.



Probleme de motivation, en l'occurrence.
Il y a des gens tres competents pour toujours aller de l'avant sur
la derniere version, qui est forcement plus sexe.

Si tu regardes sur le bugzilla, c'est impressionnant le nombre de bugs non
corriges en 4.2* qui ont ete fermes par l'abandon de la branche et "doesn't
occur in 4.3". En terme de qualite du soft, c'est catastrophique: t'as un
compilo qui en fait contient pas mal de problemes (la plupart se produisant
ailleurs que sur la plateforme de references), mais ceux-ci ne sont jamais
corriges, parce que les gens preferent bosser sur la version suivante... qui
va contenir des bugs differents, parce que le code a tout change.

On a deja constate le probleme par le passe, avec propolice. Il y a un
-fstack-protector dans openbsd, meme si le compilo systeme y etait un gcc
3.3. Faire propolice, ca n'etait fondamentalement pas complique (encore que,
visiblement, les gens qui ont fait ca etaient plus doues que les manches
actuels dans gcc, vu que ca ne marche pas sur alpha chez eux). Ce qui a ete
dur, c'est de corriger les multiples bugs que ca declenchait AILLEURS dans
gcc: suffisait de prendre autre chose que les codepaths bien testes par les
options "classiques" de gcc pour declencher des problemes...
Avatar
JKB
Le 16-05-2010, ? propos de
Re: [C99] gcc et fonctions 'inline',
Marc Espie ?crivait dans fr.comp.lang.c :
In article <hsn6h6$p8u$, Marc wrote:
Marc Espie wrote:

Tiens, je viens de tomber sur un exemple qui illustre bien le souci:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id2544

un bug-report precis, sur une regression qui affecte la branche 4.2* par
rapport a la branche 4.1, et qui a ete corrige en 4.3.



Merci pour l'exemple et les explications, c'est beaucoup plus clair.

Au final, le bug a ete ferme. Pourquoi ? pas parce qu'il a ete corrige, mais
parce que la branche 4.3 fait des trucs differemment, et n'exhibe plus le
probleme...



Enfin il a été fermé quand la branche a été abandonnée, ce qui s'est
produit presque 2 ans après la dernière activité sur ce bug. Donc dans ce
cas très précis, le plus gros problème est qu'en 2 ans personne n'a été
assez motivé/compétent pour corriger le bug. Mais je comprends ce que tu
veux montrer.



Probleme de motivation, en l'occurrence.
Il y a des gens tres competents pour toujours aller de l'avant sur
la derniere version, qui est forcement plus sexe.

Si tu regardes sur le bugzilla, c'est impressionnant le nombre de bugs non
corriges en 4.2* qui ont ete fermes par l'abandon de la branche et "doesn't
occur in 4.3". En terme de qualite du soft, c'est catastrophique: t'as un
compilo qui en fait contient pas mal de problemes (la plupart se produisant
ailleurs que sur la plateforme de references), mais ceux-ci ne sont jamais
corriges, parce que les gens preferent bosser sur la version suivante... qui
va contenir des bugs differents, parce que le code a tout change.

On a deja constate le probleme par le passe, avec propolice. Il y a un
-fstack-protector dans openbsd, meme si le compilo systeme y etait un gcc
3.3. Faire propolice, ca n'etait fondamentalement pas complique (encore que,
visiblement, les gens qui ont fait ca etaient plus doues que les manches
actuels dans gcc, vu que ca ne marche pas sur alpha chez eux). Ce qui a ete
dur, c'est de corriger les multiples bugs que ca declenchait AILLEURS dans
gcc: suffisait de prendre autre chose que les codepaths bien testes par les
options "classiques" de gcc pour declencher des problemes...



Nous somems bien d'accord, encore que ma vision d'OpenBSD n'est pas
aussi idéalisée que la tienne (il y a longtemps que je ne porte plus
mes codes sous OpenBSD tellement j'ai de problèmes avec ce système.
Net ou Free, c'est bien, Open... Passons...). En revanche, il ne
faut pas oublier que si gcc est une fuite en avant permanente, c'est
tout de même le seul compilateur qui soit disponible à peu près
partout malgré ses défauts. Personnellement, je préfère caviarder
mes codes avec des #ifdef plutôt que de devoir changer de
compilateur à chaque fois. Il y a déjà tellement de différences
entre deux libc (ou deux systèmes) que je ne pousse pas le vice à
changer aussi de compilateur.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
espie
In article ,
JKB wrote:
Nous somems bien d'accord, encore que ma vision d'OpenBSD n'est pas
aussi idéalisée que la tienne (il y a longtemps que je ne porte plus
mes codes sous OpenBSD tellement j'ai de problèmes avec ce système.
Net ou Free, c'est bien, Open... Passons...).



Ca depend pas mal de ce que tu fais, j'aimerais bien des details sur les
problemes que tu vois. (bon, si c'est des problemes de locale, on est
chroniquement a la traine...)

(on est conscients de certaines des limitations de ce qu'on fait, mais ca
progresse de facon mesurable d'une version a la suivante)
Avatar
JKB
Le 16-05-2010, ? propos de
Re: [C99] gcc et fonctions 'inline',
Marc Espie ?crivait dans fr.comp.lang.c :
In article ,
JKB wrote:
Nous somems bien d'accord, encore que ma vision d'OpenBSD n'est pas
aussi idéalisée que la tienne (il y a longtemps que je ne porte plus
mes codes sous OpenBSD tellement j'ai de problèmes avec ce système.
Net ou Free, c'est bien, Open... Passons...).



Ca depend pas mal de ce que tu fais, j'aimerais bien des details sur les
problemes que tu vois. (bon, si c'est des problemes de locale, on est
chroniquement a la traine...)



Il y a effectivement des problèmes de locales, mais ça se contourne
(assez) facilement. Les problèmes que j'ai sont surtout liés à
l'utilisation des threads POSIX sous OpenBSD (avec sigaltstack pour
récupérer les débordements de pile et les signaux) ainsi que la
gestion des signaux par thread.

(on est conscients de certaines des limitations de ce qu'on fait, mais ca
progresse de facon mesurable d'une version a la suivante)



Pas sur les points qui m'intéressent. Mes bugs reports datent au
moins de la 4.2 sans que ça progresse significativement. Tu me diras
que je n'ai qu'à ne pas torturer les specs POSIX comme je le fais et
tu auras sans doute raison. Le problème est que je n'ai pas vraiment
le choix pour avoir quelque chose d'à-peu-près portable sur mes
systèmes d'exploitation et architectures cibles. Le compilo
gcc d'Open est aussi un truc bizarre. Pour avoir le moins de
problème, j'utilise toujours le gcc mainstream officiel, pas celui
de la distribution. Mon code embarque du Fortran 9x, 2003, mais
aussi 77 ainsi que du C89 et maintenant du C99. Il me faut donc un
gcc au moins égal à 4.0 et un gfortran au moins égal à 4.3, et
là, ça devient franchement marrant. La dernière fois que j'ai dû
compiler un 4.3 ou 4.4 sous OpenBSD, ce n'était pas la joie, parce
que le compilo par défaut est un 3.x qui bootstrappe difficilement
un gcc 4.3. Et pourtant, j'ai déjà compilé gcc sur des architectures
largement plus exotique que OpenBSD/x86.

Pour dériver un peu, lorsque je fais un bug report sur un point
précis, l'équipe de NetBSD ou de FreeBSD traite le problème dans un
délai raisonnable (le dernier que j'ai fait chez Free a été traité
en une semaine). La même chose chez Open me revient avec un "won't
fix" ou un magnifique "ne sera pas implanté parce que non 'secure'"
pour le coup des symboles faibles pthread/sigaltstack (remarque, ce
n'est pas pire que lorsque tu fais un bug report à Ulrich Drepper
qui commence à te prendre pour un imbécile jusqu'au moment où tu
arrives à lui mettre le nez dans ses erreurs et ses lectures
diagonales des specs [voir pthread_kill qui renvoie un SEGFAULT à la
place de ESRCH, là, il a fait fort puisque la page de manuel n'est
même pas conforme à ce que fait la fonction !]). La moindre
des choses serait au moins que la fonction en question échoue
proprement et non avec un signal 11 du plus mauvais effet.

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
1 2 3 4