跳到内容
新问题

有关于这个项目的问题吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。

单击“注册GitHub”,表示您同意我们的服务条款隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。

已经在GitHub上了?登录到您的帐户

不透明签名归属中的不匹配规范导致未捕获的异常 #285

关闭
12项任务中的4项
兹比恩已打开此问题2023年10月25日·4条评论
关闭
12项任务中的4项

不透明签名归属中的不匹配规范导致未捕获的异常 #285

兹比恩已打开此问题2023年10月25日·4条评论
受让人
标签
缺陷 有些东西不起作用了 编译器 编译器问题 固定在110.99.5中 将在110..99.5版本中修复的问题

评论

@兹比恩
复制链接
贡献者

兹比恩 评论2023年10月25日

版本

110.99.4(最新)

操作系统

  • 任何
  • Linux操作系统
  • macOS操作系统
  • 窗户
  • 其他Unix

操作系统版本

MacOS索诺玛

处理器

  • 任何
  • 手臂(使用Rosetta)
  • PowerPC公司
  • 斯巴达克
  • x86(32位)
  • x86-64(64位)
  • 其他

系统组件

核心系统

严重程度

次要

描述

如果结构与签名不匹配,核心系统就会因未捕获的异常Bind而崩溃。只有当结构使用不透明的归属时才会发生这种行为:>但不是:.

成绩单

[测试.sml]:

结构答:>信号发生器
  val值不存在:int结束=结构
结束
$sml测试.sml新泽西州标准ML(64位)v110.99.4[建造日期:2023年8月1日星期二16:07:38][打开测试.sml]test.sml:1.2-4.4错误:值规范不匹配:不存在未捕获异常绑定[非穷尽绑定失败]提出时间:/compiler/Elaborator/extensiol/elabmod.sml:624.13-624.67../compiler/Elaborator/expective/elabmod.sml:1363.32../compiler/Basics/stats/stats.sml:198.40../compiler/TopLevel/interact/evalloop.sml:45.54../compiler/TopLevel/interact/evalloop.sml:306.20-306.23

或直接在命令行中:

$sml(美元)新泽西州标准ML(64位)v110.99.4[建造日期:2023年8月1日星期二16:07:38]-结构A:>sig-val不存在:int end=结构结束;stdIn:1.2-1.59错误:值规范不匹配:不存在意外异常(bug?)在里面SML/NJ:绑定[非穷尽绑定失败]提出时间:/compiler/Elaborator/extensiol/elabmod.sml:624.13-624.67../compiler/Elaborator/expective/elabmod.sml:1363.32../compiler/Basics/stats/stats.sml:198.40../compiler/TopLevel/interact/evalloop.sml:45.54

预期行为

系统应报告错误并继续。

复制步骤

-结构A:>sig-val不存在:int end=结构end;

其他信息

无响应

电子邮件地址

byronzhong@cs.uchicago.edu邮箱

@兹比恩 兹比恩补充这个缺陷 有些东西不起作用了标签2023年10月25日
@JohnReppy公司 JohnReppy公司补充这个编译器 编译器问题标签2023年10月25日
@兹比恩
复制链接
贡献者 作者

在对分之后,我可以找到引入此错误的第一个提交是9c7dd2b年,这很奇怪,因为该提交中唯一的更改是版本号。我怀疑这可能与引导有关。

作为参考,这是我传递给的脚本git平分运行:

rm-rf boot.amd64-unix.tgz bin库&&配置/安装.sh>/开发/空2>/开发/空如果[[! -(f) "箱子/sml"]]; 然后
  出口125#跳过此提交
fi(菲涅耳)

如果bin/sml测试.sml|希腊语-q"绑定"; 然后
  出口1其他的
  出口0fi(菲涅耳)

@德马奎恩
复制链接
贡献者

德马奎恩 评论2023年12月8日

Bind异常的原因是在Elaborator/expective/elabmod.sml中的函数constrStr(重命名为“constraintStr”)中。此函数取决于Elaborator/modules/sigmatch.sml中matchStr函数的行为。matchStr函数正在更改,以便它返回一个选项(而不是“伪”记录),如果签名匹配失败,则为NONE。然后,当签名匹配失败时,constraintStr函数也将返回NONE,并且必须修改elabmod.sml中constraintStr的调用以处理此更改。此外,当matchStr失败时,我们需要确保anyErrors设置为true,以确保阻止精化阶段以外的编译。这项工作已经部分完成,但仍需要一些调试——它涉及sigmatch.sml和elabmod.sml中的一些重要更改。

此错误是错误处理逻辑中可能出错的典型情况,在许多细化阶段,错误并不是立即致命的,但通过返回“无害”的虚拟值(例如ERRORty),可以安排细化在错误发生后继续(并可能发现和报告更多错误)在检测到错误的时候,这些虚拟值被设计为允许阐述者“偶然发现”。但是,细化时间错误应该将anyErrors标志设置为true,这会切断细化后的编译阶段。

@德马奎恩
复制链接
贡献者

此问题按问题重复#289。请参阅那里的评论,其中有一个简单的修复程序,不幸的是,它有一个神秘的副作用,阻止了传统的引导。

@德马奎恩
复制链接
贡献者

110.99.5中的“固定”。参见问题的结束评论#298,这是一个相关的问题。

@JohnReppy公司 JohnReppy公司补充这个固定在110.99.5中 将在110..99.5版本中修复的问题标签2024年3月5日
免费注册 在GitHub上加入此对话.已经有帐户了吗?登录以发表评论
标签
缺陷 有些东西不起作用了 编译器 编译器问题 固定在110.99.5中 将在110..99.5版本中修复的问题
项目
还没有
开发

没有分支或拉请求

3名参与者