J'ai mis à jour mon installation locale de fish en utilisant homebrew vers 020fe5ccdfbbc147977ae11803816475e9fef763, et il se bloque au lancement, tout en lisant config.fish
.
Voici ce que je vois lorsque je l'exécute dans lldb et lorsque je l'exécute avec un --debug-level élevé : https://gist.github.com/thomcc/4bda5472facccd4c93884df3e3e50044 (en fait, il inclut désormais également les désassemblages de fonctions).
D'après les désassemblages, il semble que le compilateur abandonne le test pour child
ici : https://github.com/fish-shell/fish-shell/blob/master/src/tnode.h#L147 , puisqu'il suppose qu'une référence ne peut jamais être nullptr, puisque c'est UB (notez qu'il réécrit un peu la fonction pour qu'elle saute à la fin lorsque nodeptr
est nullptr, donc il sait child
ne pouvait pas être nul pour cette raison).
Il pourrait également y avoir d'autres problèmes, bien sûr, surtout si un autre code a le même problème (par exemple, suppose qu'une référence pourrait être nullptr).
Malheureusement, ce genre de problème est très difficile à reproduire, et je ne peux pas le faire sur une version en dehors de l'installation à partir d'homebrew, même si tout le reste devrait être le même (je suppose qu'il est possible qu'il ait un chemin différent et trouve un autre clang
? Je ne sais pas).
C'est fiable pour moi dans les homebrews, cependant.
Oui, je peux également reproduire cela avec les versions Homebrew sur macOS 10.11. Il est intéressant de noter que cela a quelque chose à voir avec l'environnement dans la phase de construction de Homebrew, car la configuration de l'arborescence en dehors de Homebrew puis l'exécution de make
intérieur de brew sh
produit une erreur de segmentation.
Oh, wow - Homebrew réécrit silencieusement les drapeaux passés au compilateur, donc _c'est_ génial. C'est pourquoi vous ne pouvez pas obtenir de symboles de débogage même si -g
semble être dans CXXFLAGS
.
Je peux reproduire cela sur macOS et Linux avec ./configure CXX=clang++ CXXFLAGS="-g -Os"
.
Belle analyse ! Devrait être corrigé par 5b3729842cacdf0566743e2327c99beed8f0cc6c. Merci!
Commentaire le plus utile
Oh, wow - Homebrew réécrit silencieusement les drapeaux passés au compilateur, donc _c'est_ génial. C'est pourquoi vous ne pouvez pas obtenir de symboles de débogage même si
-g
semble être dansCXXFLAGS
.Je peux reproduire cela sur macOS et Linux avec
./configure CXX=clang++ CXXFLAGS="-g -Os"
.