タグ付けされた質問 「compiler-bug」

3
関数から構造体を返すときのGCCバグの可能性
O'NeillのPCG PRNGの実装中にGCCのバグを見つけたと思います。(Godboltのコンパイラエクスプローラの初期コード) 、(rdiに格納された結果)を乗算oldstateした後MULTIPLIER、GCCはその結果をINCREMENTに追加せず、INCREMENT代わりにrdxに移動し、rand32_ret.state の戻り値として使用されます。 最小限の再現可能な例(コンパイラエクスプローラ): #include <stdint.h> struct retstruct { uint32_t a; uint64_t b; }; struct retstruct fn(uint64_t input) { struct retstruct ret; ret.a = 0; ret.b = input * 11111111111 + 111111111111; return ret; } 生成されたアセンブリ(GCC 9.2、x86_64、-O3): fn: movabs rdx, 11111111111 # multiplier constant (doesn't fit in imm32) xor …
133 c  gcc  assembly  x86-64  compiler-bug 

2
リリースモードでは、コードの動作は期待どおりではありません
次のコードは、デバッグモードとリリースモード(Visual Studio 2008を使用)で異なる結果を生成します。 int _tmain(int argc, _TCHAR* argv[]) { for( int i = 0; i < 17; i++ ) { int result = i * 16; if( result > 255 ) { result = 255; } printf("i:%2d, result = %3d\n", i, result) ; } return 0; } デバッグモードの出力。これは予想どおりです。 i: 0, …

6
(this == null)C#で!
C#4で修正されたバグのため、次のプログラムはを出力しtrueます。(LINQPadでお試しください) void Main() { new Derived(); } class Base { public Base(Func<string> valueMaker) { Console.WriteLine(valueMaker()); } } class Derived : Base { string CheckNull() { return "Am I null? " + (this == null); } public Derived() : base(() => CheckNull()) { } } リリースモードのVS2008では、InvalidProgramExceptionがスローされます。(デバッグモードでは、正常に動作します) VS2010 Beta 2では、コンパイルされません(私はBeta 1を試していません)。私は難しい方法を学びました this …

1
なぜこのHaskellコードは-Oで遅くなるのですか?
このHaskellコードは、を使用すると実行速度が大幅に低下しますが-O、危険で-Oはありません。誰が何が起こったのか教えてもらえますか?それが重要な場合は、この問題を解決する試みであり、バイナリ検索と永続セグメントツリーを使用します。 import Control.Monad import Data.Array data Node = Leaf Int -- value | Branch Int Node Node -- sum, left child, right child type NodeArray = Array Int Node -- create an empty node with range [l, r) create :: Int -> Int -> Node create l r | l …

1
テンプレートクラスの構造体でのC ++コンパイラの問題
次のコードは、gccまたはclangでコンパイルできません。 template<class T> class foo{}; template<class T> class template_class_with_struct { void my_method() { if(this->b.foo < 1); }; struct bar { long foo; } b; }; エラーメッセージは error: type/value mismatch at argument 1 in template parameter list for 'template<class T> class foo' 8 | if(this->b.foo < 1); エラーはtemplatクラスfooが原因で発生します。<1の代わりに<=を書き込むと、コンパイルも行われます。 ヒントはありますか? CompilerExplorerリンクhttps://godbolt.org/z/v6Tygo

2
Constオーバーロードがgccで予期せず呼び出されました。コンパイラのバグまたは互換性の修正?
charおよびconst char配列のテンプレートのオーバーロードに依存する、はるかに大きなアプリケーションがあります。gcc 7.5、clang、およびビジュアルスタジオでは、以下のコードはすべてのケースで「NON-CONST」を出力します。ただし、gcc 8.1以降の場合、出力は次のようになります。 #include <iostream> class MyClass { public: template <size_t N> MyClass(const char (&value)[N]) { std::cout << "CONST " << value << '\n'; } template <size_t N> MyClass(char (&value)[N]) { std::cout << "NON-CONST " << value << '\n'; } }; MyClass test_1() { char buf[30] = "test_1"; return …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.