首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RyuJIT -带ushort和等于重写的Bug (64位)

RyuJIT -带ushort和等于重写的Bug (64位)
EN

Stack Overflow用户
提问于 2016-12-18 20:38:49
回答 1查看 132关注 0票数 1

在将32位托管应用程序移植到64位时,我在struct中观察到了相等()覆盖的奇怪行为。

你可以在github找到一个复制品。

为了重现错误,您应该编译带有“优化”标志的库。这是发行版配置的默认设置。必须在不进行任何优化的情况下编译消费TestApp。首选32位必须禁用作为64位应用程序启动。参见关于github!的说明

库包含一个实现IEquatable接口的结构,该接口是用简单的代码行实现的。

代码语言:javascript
复制
    public bool Equals(StructWithValue other)
    {
        return value.Equals(other.value);
    }

此代码调用ushort/UInt16 16类型的相等方法。如果使用建议的配置构建解决方案,则32767以上的所有值都将失败。如果ushort值为32768,则调用Equal,“other”的值也为32768。但等于()将对32767以上的所有值返回false。

如果您将方法更改为使用“==”运算符,则代码将工作。此外,如果将类型从struct更改为class,代码将按预期运行。

代码语言:javascript
复制
    public bool Equals(StructWithValue other)
    {
        return value == othervalue;
    }

我认为这是中的一个bug。如果我使用遗留的,代码可以正常工作。

在不同的windows版本上使用Visual 2015和TargetFramework 4.6.2进行测试。

EN

回答 1

Stack Overflow用户

发布于 2016-12-18 21:21:00

通过检查确认了窃听器。

我无法想象还有什么答案会出现在这里。如果错误是不真实的,你会得到一个答案,告诉你你的代码哪里错了,但你的代码没有错。

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

https://stackoverflow.com/questions/41212637

复制
相关文章

相似问题

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