已开启
[BUG - STS Beta 测试] if-else/match 表达式条件分支普遍误报 unreachable 警告 #3074
小枫溪创建于 3月16日
3月16日 添加了label:1.1.0-beta.23STS捉虫
3月17日 将 zichexuelan 设为负责人
3月17日 修改了issue 的描述
3月17日 修改了issue 的描述
Cangjie-Sundaiyue
3月19日 评论:
3月19日 评论:
感谢反馈,当前已确认是问题。之前我们已经修复了部分场景的unreachable问题,目前排查仍有部分场景遗漏,我们计划重构相关代码,后续有新进展将在此issue下回复。


7月24日 关联了pull request:fix(chir): refine unreachable warning diagnostics
7月24日 关联了pull request:test(chir): cover unreachable warning regressions
8月13日 关联了pull request:feat(chir): refine unreachable warning diagnostics
9月2日 关联了pull request:feat(chir): improve constant reachability analysis
9月2日 关联了pull request:test(chir): cover constant reachability
🎉 感谢您参与仓颉编程语言 STS 1.1.0 Beta 测试活动!
📋 提交前必读
在提交 Bug 报告之前,请先确认:
[x] 我正在使用 STS 1.1.0-Beta.23 版本
[x] 我已经搜索过现有的 Issues,确信这是一个新问题
[x] 我已经阅读了 STS 版本说明
[x] 我能够提供详细的复现步骤和代码示例
Bug 严重程度
🟢 低级(UI 显示、提示文本等)
Bug 分类
编译器(Compiler)相关
Bug 描述
编译器的控制流可达性分析存在严重缺陷,在以下两种常见场景中错误地报告"不可达代码"警告:
if-else 链中的 else if 分支被误报为不可达
match 表达式中的分支被误报为不可达
影响:
复现步骤
cjpm build最小代码示例
### 示例 1: if-else 链误报 ```cj main() { let x = 15 if (x > 20) { println("x > 20") } else if (x > 10) { println("x > 10") } else if (x > 0) { println("x > 0") } else { println("x <= 0") } }示例 2: match 表达式误报
main() { let grade = 85 let label = match (grade) { case g where g >= 90 => "A" case g where g >= 80 => "B" case g where g >= 70 => "C" case _ => "D" } println("${label}") }实际执行结果
矛盾:编译器警告说代码不可达,但代码实际被正确执行了。
操作系统版本
Windows 11
开发环境
代码编辑器(无插件)
补充信息
贡献意愿
[x] 我愿意尝试修复这个 Bug 并提交 PR
[x] 我希望参与讨论修复方案
[ ] 我仅提供 Bug 报告,不参与开发