問題タブ [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++ - クラス テンプレートの特殊化の場所を変更すると、SFINAE がめちゃくちゃになるのはなぜですか? これは C++ のバグですか?
次のコードでは、予期されるコンパイラ エラーが発生します ( Demo )。
ここで、5 行目と 7 行目を入れ替えるとします。次に、コンパイラエラーはありません!! デモ。
の場合o1
、特殊化(value > 2)
がまだ表示されていないため、エラーがないことは理解できます。o2
しかし、 2 つの一致する特殊化が表示されるエラーが発生しないのはなぜですか!?
私の推測では、コンパイラは、Unique<3>::type
初めて遭遇したときに任意の名前を選択しUnique<3>::type
、その名前ですべてを置き換える必要があります。
これはコンパイルのバグですか、それとも C++ のバグですか、それとも C++ の「機能」ですか?
c# - C#でのパラメーターの名前付けと混合:出力パラメーターにも名前を付ける必要があるのはなぜですか?
短いバージョン:引数に続く名前付き引数out
はコンパイラエラーを出しますが、言語仕様でこの動作のサポートを見つけることができません。
ロングバージョン:
私は3つのパラメーターのオーバーロードを使用していますが、コードを明確にするためにパラメーターにEnum.TryParse<TEnum>
名前を付けたいと思います。次のような呼び出しです。ignoreCase
ブール値の意味が不明確になります(この方法が知られていない場合1)。したがって、私は使用したいと思います:
ただし、コンパイラはこれをエラーとして報告します。
名前付き引数'ignoreCase'は、位置引数がすでに指定されているパラメーターを指定します
IDEはignoreCase
パラメータを強調表示します。.NET 4を対象とするVS2010、および4または4.5を対象とするVS11 Betaは、すべて同じ結果をもたらします。いずれの場合も、out
パラメーターに名前を付けるとエラーが削除されます。
フレームワークとアセンブリの両方から、さまざまな方法(ジェネリックスの回避を含む)2でこれを試しました。常に同じ結果です。out
パラメーターの後に名前付きパラメーターを指定すると、エラーが発生します。
このエラーの理由はわかりません。§7.5.1C #言語仕様の引数リスト:バージョン4.0out
では、名前付きパラメーターが後に続くとエラーが発生する理由は提供されていないようです。エラーのテキストは、バグとしての解釈をサポートしているようです。に有効な一致となる可能性のある位置引数はありませんignoreCase
。
仕様の読み方が間違っていますか?それとも、これはコンパイラのバグですか?
C#7.2アップデート
C#7.2で呼び出しが解除された場合、すべての名前付き引数に対するこの制限は、位置引数に従う必要があります。
https://docs.microsoft.com/en-gb/dotnet/csharp/whats-new/csharp-7-2#non-trailing-named-argumentsを参照してください。
1enum
したがって、パラメータを優先するためのフレームワーク設計ガイドラインのアドバイス。
2例:与えられた:
この呼び出しでも、out
パラメーターに名前が付けられていない限り、名前付きパラメーターで同じエラーが発生します。
java - java 5以降の揮発性が別のスレッドからの可視性を保証しないのはなぜですか?
によると:
http://www.ibm.com/developerworks/library/j-jtp03304/
新しいメモリ モデルでは、スレッド A が揮発性変数 V に書き込み、スレッド B が V から読み取る場合、V が書き込まれた時点で A に表示されていた変数値は、B に表示されることが保証されます。
また、インターネット上の多くの場所では、次のコードは決して「エラー」を出力してはならないと述べています。
b
が 1 の場合、すべてのスレッドで 1 にする必要a
があります。
ただし、「エラー」が表示されることがあります。これはどのように可能ですか?
gcc - ビットフィールドの GCC 実装のバグ
C11 での作業、次の構造体:
unsigned
4 ビットが使用される (4 バイト)として GCC によってレイアウトされ、その後_Bool
に 1 ビットが使用される (4 バイト) が続き、合計サイズは 8 バイトになります。
C99 と C11 では_Bool
、ビット フィールド メンバとして明確に許可されていることに注意してください。C11 標準 (およびおそらく C99 も) は、§6.7.2.1 '構造体および共用体指定子' ¶11 の下で次のように述べています。
実装では、ビットフィールドを保持するのに十分な大きさのアドレス可能なストレージユニットを割り当てることができます。十分なスペースが残っている場合、構造内の別のビットフィールドの直後に続くビットフィールドは、同じユニットの隣接するビットにパックされます。
したがって、b
上記のメンバーは、メンバーに割り当てられたストレージユニットにパックされているはずでありa
、合計サイズが 4 バイトの構造体になると思います。
GCC は正しく動作し、2 つのメンバーに同じ型を使用する場合、または一方がunsigned
で他方が である場合にパッキングが行われますsigned
が、型unsigned
と_Bool
は GCC によって区別されすぎて正しく処理できないと見なされているようです。
誰かが標準の私の解釈を確認できますか?これは実際に GCC のバグです?
また、回避策 (コンパイラ スイッチ、プラグマなど) にも興味があり__attribute__
ます。
私は gcc 4.7.0 を使用して-std=c11
います (ただし、他の設定は同じ動作を示します)。
c - gcc インライン asm ステートメントが最適化されて取り除かれます - 制約が間違っていますか?
gcc インライン asm ステートメントに問題があります。gcc は、結果が定数であると考えているようで (そうではありません)、ステートメントを最適化します。オペランド制約を正しく使用していると思いますが、この問題についてセカンド オピニオンをお願いします。制約の使用に問題がない場合は、gcc バグ レポートのテスト ケースを分離しようとしますが、周囲のコードのわずかな変更でも問題が消えるため、難しい場合があります。
問題のインラインasmは
これは、2 語の被除数を 1 語の除数で割った、ありきたりの剰余です。入力の上位ワード a2 と剰余出力 *r は、"1" 制約によって同じレジスタ %rdx に関連付けられていることに注意してください。
周囲のコードから、ularith_div_2ul_ul_ul_r()
あたかも
したがって、入力の上位ワード a2 は定数 1UL です。gcc -S -fverbose_asm の結果の asm 出力は次のようになります。
その結果、ularith_div_2ul_ul_ul_r()
呼び出しの結果は定数 1 であると見なされます。divq は出力に表示されません。
さまざまな変更により、問題が解消されます。異なるコンパイラ フラグ、異なるコード コンテキスト、または asm ブロックのマーキング__asm__ __volatile__ (...)
。出力には divq 命令が正しく含まれています。
そこで、ここでインライン アセンブリ担当者に質問します。制約に何か問題がありましたか?
c - printf の %s 指定子で NULL を出力すると、どのような動作になりますか?
興味深いインタビューの質問に出くわしました:
これは一部のシステムでは問題なく動作する可能性がありますが、少なくとも私のシステムではセグメンテーション エラーが発生しています。この動作の最良の説明は何ですか? 上記のコードは C です。
以下は私のgcc情報です:
c++ - クラスをエクスポートすることで違いが生じるはずですか?
でコンパイルするとVS 2010/2012
、次のエラーが発生します。
エラーC4716:'DI_1 :: operator =':値を返す必要があります
DI_2
一方、クラスでも同じエラーが返されることを期待していました。
DI_2
これは、クラスにエラーとしてフラグを立てないコンパイラのバグですか?
そうでない場合、誰かが理由を説明できますか?
編集:Solarisコンパイラで確認しましたが、両方のクラスでエラーがスローされます。
c++ - Visual C ++ 2012(x86)で考えられるコンパイラのバグ?
現在、 VC ++ 11(CTP Update 1)を使用してx86ターゲット用にコンパイルすると、ランダムな浮動小数点エラーが発生します。以下の短い例「test.cpp」を参照し、以下を使用してコンパイルしてください。
出力はである必要がありますが、 (プログラム全体の最適化)が有効になっている場合10 == 10
に生成されます。問題は、結果を浮動小数点スタックにプッシュすることのようですが、呼び出し元の関数は、SSEレジスタXMM0に結果を期待しています。10 == 0
/GL
get_scaling_factor()
質問:私は明らかな何かを見逃していますか、それともこれは本当にバグですか?もちろん、テストプログラムは簡素化されたテストケースであるため、意味がありません。
test.cpp:
アップデート
Microsoftによって確認された問題。これは、次のような単純なコードにも影響します。
javascript - CoffeeScript で e += 1 と e = e + 1 のコンパイルが異なるのはなぜですか?
私はいつもそれを想定して<var> += 1
おり<var> = <var> + 1
、JSでも同じセマンティクスを持っています。
さて、この CoffeeScript コードは、グローバル変数に適用されると、別の JavaScript にコンパイルされますe
。
b
グローバル変数を使用するのに対しa
、ローカル変数を定義することに注意してください。
自分で試してみてください。
これはバグですか、それとも理由がありますか?
c++ - 可変個引数テンプレート関数パラメーターのコンパイル エラー
以下のようなパラメーターラッピングヘルパーコードを書き込もうとしています
このコードは、名前空間のない型の固定パラメーター関数または左辺値参照で機能しますが、私のコンパイラは、一部の名前空間で右辺値参照パラメーターを使用しようとする試みを拒否します。vc11 ctp バージョンを使用していますが、エラー メッセージがややわかりにくいです (以下を参照)。
コンパイラのバグのようですが、自信がありません。これはバグですか?そうでない場合、問題を解決するにはどうすればよいですか?