問題タブ [compiler-bug]
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++ - clang -O3 でのこの動作はなぜですか?
これは、整数の約数を数える短いプログラムです。プログラムは正しく動作します。ただし、問題は、-O3
Clang C++ コンパイラ (バージョン 3.3、トランク 180686) の現在のトランクの最適化フラグの下では、プログラムの動作が変化し、結果が正しくないことです。
コード
コードは次のとおりです。
正しい行動
以下は、使用されたコンパイル コマンドと、プログラムが通常の状況で表示する正しい期待される出力です。
不適切な動作
これは、誤った出力を与えるバイナリを生成するために使用されるコマンド ラインです。唯一の変更は最適化フラグ ( -O2
to -O3
.)であることに注意してください。
編集
トランクのヒント、clang バージョン 3.4 (トランク 183073) に更新しました。この動作はもう再現されません。何らかの方法で既に修正されているはずです。実際に検証されて修正された問題があった場合は、問題が何であるかを知っている人は、お気軽に回答を提供してください。検証されたものがない場合、回帰が発生する可能性があります。
c++ - VS2012 コンパイラのバグの可能性 (プログラム全体の最適化でしょうか?)
これはコンパイル エラーでしょうか? 私の環境は次のとおりです。
- Win7 プロ (64 ビット)
- VS2012 (アップデート 3)
以下の小さなコンソールプログラムをコンパイルします。x64 ビットのリリース/デバッグ ビルドでは問題なく動作します。x32 デバッグ ビルドも問題なく動作します。ただし、x32 リリース ビルドでは「BUG!」が表示されます。
「プログラム全体の最適化」を無効にすると、問題が解決します。
何か案は?
-
c++ - コンパイラのバグ、または非標準コード? -ラムダでの可変個引数テンプレートのキャプチャ
次の C++11 コードがあります。
によると、それは有効なC++ 11であると私は信じています。標準のセクション 5.1.2.23。
省略記号が続くキャプチャは、パック展開 (14.5.3) です。[ 例:
— 終了例 ]
ただし、Clang++ は正常にコンパイルされますが、G++ ではこのエラーが発生します。
だから私の質問は簡単です、これは G++ のコンパイラのバグですか?
c++ - 危険なエラー Visual c++ 2005
C++ Win32 コンソール アプリケーションを実行している Visual Studio 2005 を使用して、非常に重大なエラーに遭遇しました。次のプロジェクト プロパティを使用して、以下のコード (簡略化) を実行すると、問題が発生します: C++|最適化|最適化|/O2 (または /O1、または /Ox)、C++|最適化|プログラム全体の最適化|/GL、リンカー|最適化|/ltcg
出力は、値 10 が値 10 より小さいことを示しています。/O2 の設定を /Od に変更すると問題が解決することは既にわかっていますが (/O2 の一部である /Og を設定すると問題が発生します)、実際には実行時間が遅くなります。また、コードを少し変更することで解決できますが、コードが信頼できるかどうかはわかりません。私はVisual Studio 2005プロフェッショナル(バージョン8.0.50727.867)、OS Windows 7を使用しています。私の質問は、誰かがVisual Studio 2005を使用してこのエラーを再現できるかどうかです(私はすでにVS 2010を試しましたが、問題ありません)。ここで起こる?新しいバージョンでこの問題が解決されたと思いますか (VS 2012 の購入を検討しています) ありがとうございます
c++ - 可変引数関数を介して親クラスのメソッドに関数ポインタを渡すことはできません - コンパイラのバグですか?
と の 2 つの構造があるGeneric_A
としGeneric_B
ます。Generic_B
から導出されGeneric_A
ます。Generic_B
親のメソッドにアクセスしようとするとGeneric_A
、次のエラーが生成されるのはなぜですか。
gcc バージョン 4.4.6 を使用してコンパイルされたこのコードは、問題を再現します。
2 つの関数呼び出しの唯一の明らかな違いcase1()
は、テンプレート引数パラメーターがあり、case2()
ないことです。どちらも Generic_B の親 (つまり&Generic_B::p1
) のメソッドに関数ポインタを渡すことを許可するべきではありませんか?
また、関数ポインターをキャストcase1
すると、エラーが解決する場合があります。
何が起こっている?
c++ - VC++ SFINAE でエラー C2070: 'overloaded-function': illegal sizeof operand が発生する
エラーの性質は、このスレッドで言及されているものとは異なります。
クラスにメンバー(メソッド)が含まれているかどうかを確認する SFINAE 方法を VC++ 環境に実装しようとしています。
以下は、そのための単純化されたコードです。
これが私Method
たちが探しているメンバーメソッドです。このコードは、 C++11 がなくてもg++ 環境で完全に機能します。
ただし、同じ結果、バグのある VC++ のコンパイラ エラーが発生します。
エラー C2070: 'overloaded-function': 不正な sizeof オペランド
を使用して SFINAE の他の回避策を試しましdecltype
たが、うまくいきませんでした。この問題の修正またはより良い回避策はありますか?