Fish-shell: Fish segfaults en el lanzamiento (analizando config.fish incorporado) cuando se construye desde HEAD con homebrew

Creado en 22 ene. 2018  ·  3Comentarios  ·  Fuente: fish-shell/fish-shell

Actualicé mi instalación local de fish usando homebrew a 020fe5ccdfbbc147977ae11803816475e9fef763, y segfaults en el lanzamiento, mientras leo config.fish .

Esto es lo que veo cuando lo ejecuto en lldb y cuando lo ejecuto con un nivel alto de depuración: https://gist.github.com/thomcc/4bda5472facccd4c93884df3e3e50044 (en realidad, ahora también incluye desmontajes de funciones).

De los desmontajes, parece que el compilador está eliminando la prueba por child aquí: https://github.com/fish-shell/fish-shell/blob/master/src/tnode.h#L147 , ya que se asume que una referencia nunca puede ser nullptr, ya que eso es UB (tenga en cuenta que reescribe la función un poco para que salte al final cuando nodeptr es nullptr, por lo que sabe child no podría ser nulo por esa razón).

También podría haber otros problemas, por supuesto, especialmente si otro código tiene el mismo problema (por ejemplo, se supone que una referencia podría ser nullptr).

Desafortunadamente, este tipo de problema es muy difícil de reproducir, y en realidad no puedo lograr que suceda en una compilación fuera de la instalación desde homebrew, aunque todo lo demás debería ser el mismo (supongo que es posible que tenga una ruta diferente y encuentra un clang ? No lo sé).

Sin embargo, es confiable para mí dentro del homebrew.

bug

Comentario más útil

Oh, wow - Homebrew reescribe silenciosamente las banderas pasadas al compilador, así que _ eso es_ asombroso. Es por eso que no puede obtener símbolos de depuración a pesar de que -g parece estar en CXXFLAGS .

Puedo reproducir esto en macOS y Linux con ./configure CXX=clang++ CXXFLAGS="-g -Os" .

Todos 3 comentarios

Sí, también puedo reproducir esto con versiones de Homebrew en macOS 10.11. Curiosamente, tiene algo que ver con el entorno en la etapa de compilación de Homebrew, ya que configurar el árbol fuera de Homebrew y luego ejecutar make dentro de brew sh produce un segfault.

Oh, wow - Homebrew reescribe silenciosamente las banderas pasadas al compilador, así que _ eso es_ asombroso. Es por eso que no puede obtener símbolos de depuración a pesar de que -g parece estar en CXXFLAGS .

Puedo reproducir esto en macOS y Linux con ./configure CXX=clang++ CXXFLAGS="-g -Os" .

Buen análisis! Debería ser reparado por 5b3729842cacdf0566743e2327c99beed8f0cc6c. ¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones