(reprise de la discussion commencée
ici)
Godzil :
Voila pourquoi il ne faut pas faire confiance a un compilateur open source:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56881#c8
Monsieur se permet de faire des optimisation en partant sur des supositions.
Ce genre d'optimisation ne devrait jamais etre fait, jamais
Zerosquare :
Je ne suis pas sûr que ce soit spécifique à GCC, d'inliner les fonctions de la libc dans certains cas. Et pour autant que je me souvienne, c'est désactivable avec un flag et/ou un attribute.
Et utiliser des fonctions qui portent le même nom que celles de la libc mais qui ne fonctionnent pas pareil est pas franchement une bonne idée.
Godzil :
C'est desactivable avec un -W-no-xxx
mais ce genre d'optimisation est foireux dans le concept, même si remplacer une fonction de la libc peux aussi être conciderer comme un problème, ça peux être légitime.
Notamment dans des cas ou tu tourne en baremetal sans OS, tu ne vas pas forcement avoir de libc qui va bien, et ton gentil GCC va te faire de optimisation non voulue la ou tu peux vouloir avoir des fonction, au moins sur le prototype, identique avec la libc, mais dont le fonctionnement peux différer un poil, comme une valeur de retour qui n'est jamais utilisé.
Ce n'est meme pas de l'inline la mais de l'optimisation aggressive sur du code qui n'existe pas.
Ie. il va inventer que
memmove(bla, truc...) est equivalent a bla = memmove(bla, truc...)
Bah d'un point de vue purement rigoureux, je suis d'accord avec toi. Mais en pratique, la très grande majorité des utilisateurs du compilateur utilisent la libc de façon standard, et ces optimisations sont bénéfiques (ça peut aussi remplacer les malloc() de petite taille par des allocations sur la pile, etc.).
Si tu fais du "bare metal" ou des trucs sioux, il y a des switches à utiliser pour le signifier au compilateur, et je pensais que c'était assez connu (la doc de GCC en parle, de mémoire).
Pour le coup je dirais que le problème n'est pas vraiment GCC, mais plutôt qu'il faudrait un autre compilo C pour l'embarqué, moins agressif en matière d'optimisations mais avec un comportement plus déterminisite. Y'a bien des compilos certifiés, mais ça coûte un bras :/