問題タブ [lto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - LTO が標準ライブラリでクラッシュを引き起こす
次のプログラムを検討してください。
さまざまなフラグを付けてビルドし、として実行しようとしましたecho foo | ./prog
。
-O0
から最適化してclang 5.0またはgcc 7.1(または7.2)でビルドすると-O3
、期待どおりに動作します。しかし、これらの構成のいずれかに追加-flto
すると、次のバックトレースですぐにクラッシュします。
Valgrind は、もう少し読みやすい方法で同じことを報告します。
また--std=c++14
、LTOを有効にしても、以下で問題なく動作します。
それで、問題は何ですか?両方のコンパイラでの C++17 の LTO 実装のバグですか? それともlibstdc++
、間違ったフラグでコンパイルされているだけですか? 私はopensuse 42.3を使用しており、標準ライブラリはリポジトリからインストールされています。
なんとか回避できますか?
gcc - gcc の -flto によって何が破棄されますか?
arm-none-eabi-gcc 6.3.1 を使用して stm32 用のファームウェアを構築しています。
リンク時の最適化を有効にしても、コンパイルして起動し、-ftlo を使用しない場合よりも ~10kiB 小さくなりますが、わずかな破損があります。
どうすればこれをデバッグできますか?
リンク時の最適化中に (誤って) 何を破棄するかを gcc に教えてもらう方法はありますか?