首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RyuJit产生错误结果

RyuJit产生错误结果
EN

Stack Overflow用户
提问于 2015-07-22 17:53:47
回答 1查看 2.6K关注 0票数 35

在最近升级到.net 4.6之后,我们发现了一个错误,RyuJit产生了不正确的结果,我们现在能够通过在app.config中添加useLegacyJit enabled="true“来解决这个问题。

如何调试由以下内容生成的机器代码?

我在VS 2015 RTM中创建了一个新的控制台项目,将其设置为发布,任何CPU,未选中的首选32位,带和不附加调试器运行都会产生相同的结果。

代码语言:javascript
复制
using System;
using System.Runtime.CompilerServices;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Calculate());
            Console.WriteLine(Calculate());

            Console.ReadLine();
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public static Value Calculate()
        {
            bool? _0 = (bool?)null;
            bool? _1 = (bool?)true;
            if (!Value.IsPresent<bool>(_1))
            {
                return default(Value);
            }

            bool? result = null;
            result = (_1.Value ? new bool?(false) : result);
            if (_0.HasValue && _0.Value)
            {
            }
            return new Value(result);
        }

        public struct Value
        {
            bool? _value;

            public Value(bool? value)
            {
                _value = value;
            }

            public static bool IsPresent<T>(bool? _)
            {
                return _.HasValue;
            }

            public override string ToString()
            {
                return _value.ToString();
            }
        }
    }
}

它应该产生:虚假的假的

但相反,它产生了:真假

这个例子的关键部分是

代码语言:javascript
复制
result = true ? false : result;

它应该总是返回false,但是从输出中可以看到,它在第一次运行该方法时返回True,在第二次运行该方法时返回一个不同的答案。从closest ()方法中删除更多的行将使它始终返回True,但给出的示例是我能够重现到实际生产场景的最接近的示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-27 19:42:10

谢谢您提供的孤立的repro程序,我可以确认这确实是优化器中的RyuJIT错误,因为内联而暴露了这个错误。我已经对编译器做了一个修正,并计算了滚出的细节。不要把它变成一个bug跟踪器,而是为了更快地扭转局面: ryujit@microsoft.com。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31570521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档