Fish-shell: Segfaults de peixes no lançamento (analisando config.fish embutido) quando criado a partir do HEAD com homebrew

Criado em 22 jan. 2018  ·  3Comentários  ·  Fonte: fish-shell/fish-shell

Eu atualizei minha instalação local de peixes usando homebrew para 020fe5ccdfbbc147977ae11803816475e9fef763 e segfaults no lançamento, enquanto lia config.fish .

Aqui está o que vejo ao executá-lo em lldb e ao executá-lo com um alto nível de depuração: https://gist.github.com/thomcc/4bda5472facccd4c93884df3e3e50044 (na verdade, agora inclui desmontagens de funções também).

Pelas desmontagens, parece que o compilador está descartando o teste de child aqui: https://github.com/fish-shell/fish-shell/blob/master/src/tnode.h#L147 , já que está assumindo que uma referência nunca pode ser nullptr, já que é UB (note que ele reescreve a função um pouco para que pule para o final quando nodeptr é nullptr, então ele conhece child não pode ser nulo por esse motivo).

Pode haver outros problemas também, é claro, especialmente se outro código tiver o mesmo problema (por exemplo, assume que uma referência pode ser nullptr).

Infelizmente, esse tipo de problema é muito complicado de reproduzir e não consigo fazer com que aconteça em uma compilação fora da instalação do homebrew, embora todo o resto deva ser o mesmo (acho que é possível que tenha um caminho diferente e está encontrando um clang ? Não sei).

No entanto, é confiável para mim dentro do homebrew.

bug

Comentários muito úteis

Oh, uau - Homebrew silenciosamente reescreve as sinalizações passadas para o compilador, então _isso_ incrível. É por isso que você não pode obter símbolos de depuração, embora -g pareça estar em CXXFLAGS .

Posso reproduzir isso no macOS e no Linux com ./configure CXX=clang++ CXXFLAGS="-g -Os" .

Todos 3 comentários

Sim, também posso reproduzir isso com as compilações do Homebrew no macOS 10.11. Curiosamente, tem a ver com o ambiente no estágio de construção do Homebrew, já que configurar a árvore fora do Homebrew e executar make dentro de brew sh produz um segfault.

Oh, uau - Homebrew silenciosamente reescreve as sinalizações passadas para o compilador, então _isso_ incrível. É por isso que você não pode obter símbolos de depuração, embora -g pareça estar em CXXFLAGS .

Posso reproduzir isso no macOS e no Linux com ./configure CXX=clang++ CXXFLAGS="-g -Os" .

Boa análise! Deve ser corrigido por 5b3729842cacdf0566743e2327c99beed8f0cc6c. Obrigado!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

olivergondza picture olivergondza  ·  3Comentários

luc-j-bourhis picture luc-j-bourhis  ·  3Comentários

Limeth picture Limeth  ·  3Comentários

krader1961 picture krader1961  ·  3Comentários

mqudsi picture mqudsi  ·  3Comentários