| initial commit | 1 年前 |
| fix: annotation on prop Signed-off-by: kangyi <kangyi9@h-partners.com> | 20 天前 |
| fix: preserve large VArray lengths Signed-off-by: yanjs <yejiasheng3@huawei.com> | 26 天前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| !1934 merge fix/issue-3351-varray-ice-oob-loc into main fix(chir): pass source location to VARRAY_GET in compound assign to avoid ICE Created-by: wyq1213 Commit-by: wyq1213 Merged-by: cangjie-ci Description: ## 变更内容(必填) 修复 cjc 编译 ICE(Internal Compiler Error: begin of range is zero, error code 12)。 **问题**:在 TranslateVArrayAssign 中,复合赋值运算符(+=、-=、&=、^=、|= 等普通复合赋值,以及走短路分支的 &&=、||=)的左侧 VARRAY_GET intrinsic 创建时未传递源码位置(source location)。只要 CHIR 能把该下标判定为越界常量,越界诊断就会在零 DebugLocation 上发射,进而在 DiagnosticEngineImpl::CheckRange 触发 InternalError。 **触发条件不限于 -O2**: - 不加任何优化选项:下标是普通局部变量(如 var b = 4; test[b] |= 1)时,ConstAnalysis 即可判定越界并发射诊断 → ICE。 - -O2:下标经常量传播折叠(如 issue 中 m[42 / getSize<Int64>()] |= 42 这种 const func 运算)后,由 RangePropagation 发射诊断 → ICE。 两条路径共用同一个缺失 loc 的 VARRAY_GET,故一行修复同时覆盖。 **修复**:在 TranslateAssignExpr.cpp:86 为 CreateAndAppendExpression<Intrinsic> 调用补上 loc 首参,使其与同文件 :113 处 CreateAndAppendVArraySet 的模式一致。修复后复合赋值越界下标由 ICE 改为正常诊断 "array index is out of bounds" 并指向赋值表达式源码位置。 **关于位置参数的选择**:VARRAY_GET 传的是 loc(整条 AssignExpr)而非上方第 81 行算好却未使用的 baseLoc,这是有意的——用 loc 才能与同一条复合赋值生成的 VARRAY_SET 同址,两条内容相同的越界诊断被 DiagnosticEngine 去重成一条;若改用 baseLoc,同一条语句会报两条重复诊断。(baseLoc 是既有死变量,属无关改动,未在本 PR 中清理。) **行为变化说明**:修复前,VArray 复合赋值越界下标触发 ICE(exit=2);修复后,输出正常诊断错误并以 exit=1 正常退出。这是从非法行为到正确诊断的改善,非回归。 **同类问题排查**:src/CHIR 下其余 CreateAndAppendExpression<Intrinsic> 调用已核对——VArray 读路径(TranslateSubscriptExpr.cpp:115)本来就传了 loc(本地实测读越界下标在修复前后都能正常诊断,不受影响);剩余未传 loc 的只有 PREINITIALIZE(GlobalVarInitializer.cpp:701)和 BEGIN_CATCH(TranslateTryExpr.cpp:149,以及 TranslateForInExpr.cpp:551 与其 #else 非 CJNATIVE 后端分支 :553)这类编译器生成节点,本身没有对应用户源码位置,也不参与范围检查诊断。因此本 PR 一行改动即覆盖该 ICE 的全部触发路径。 **回归用例**:配套用例在 https://gitcode.com/Cangjie/cangjie_test/pulls/2021 (同一 issue 关联,多仓联合门禁)。 详见:https://gitcode.com/Cangjie/UsersForum/issues/3351 ## 变更类型(必填) - [X] 问题修复 - [ ] 新增需求 - [ ] 构建过程或辅助工具变动 - [ ] 文档更新 ## 变更内容自检(必填) ### 平台差异情况: - [X] 不涉及 - [ ] 涉及 ### 影响组件: - [X] cjc(仓颉编译器) - [ ] LSP(仓颉语言服务工具) - [ ] cjfmt(仓颉格式化工具) - [ ] cjlint(仓颉静态检查工具) - [ ] stdx(仓颉扩展库) - [ ] 其他 ### 编译本地自验证结果: - [X] 仓颉编译器编译通过 - [ ] 仓颉运行时编译通过 - [ ] 仓颉标准库编译通过 - [ ] 不涉及 ### 测试用例本地自验证结果: - [X] 通过 - [ ] 不涉及 验证情况: - -O2 复现用例(Issue 原样):修复前 ICE exit=2,修复后正确诊断 "array index is out of bounds" + exit=1 - 不开优化选项、下标为普通变量(var b = 4; test[b] |= 1):修复前同样 ICE exit=2(诊断由 ConstAnalysis 发射),修复后正确诊断 "array index 4 is past the end of array" + exit=1 - 新增回归用例(cangjie_test!2021),三个新增用例同在 LLT/compiler/CHIR/ConstantSafetyCheck/VArrayIndexOutOfBounds/,与漏掉本缺陷的既有用例 varrayAsg01.cj 并列: - varrayAsg02.cj:不依赖优化选项,下标为普通变量,覆盖 ConstAnalysis 发射路径与 TranslateVArrayAssign 三个分支(|=、+= 普通复合赋值;&&= AND_ASSIGN;||= OR_ASSIGN),/* SCAN */ 逐字符比对 4 条诊断 - varrayAsg03.cj / varrayAsg04.cj:%enableO2 折叠 const func 下标后由 RangePropagation 报出,分别对应越上界 / 越下界,/* SCAN */ 比对诊断位置与文本 - 本地 mac_aarch64、--level=0:目录内 5 个用例全 PASS;换用修复前的 cjc,三个新增用例均 FAIL;变异测试(改期望行号 / 改 range 数值 / 去掉 %enableO2)均 FAIL,确认断言非空转 ## 关联的issue(必填) https://gitcode.com/Cangjie/UsersForum/issues/3351 See merge request: Cangjie/cangjie_compiler!1934 | 6 天前 |
| fix: simplify the inheritance hierarchy of Expression Signed-off-by: kangyi <kangyi9@h-partners.com> | 25 天前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| fix: normalize the callee of the invoke expression Signed-off-by: Mr_Kang_Yi <kangyi9@h-partners.com> | 7 天前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| initial commit | 1 年前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| fix: simplify the inheritance hierarchy of Expression Signed-off-by: kangyi <kangyi9@h-partners.com> | 25 天前 |
| fix: modify CHIR dir structure Signed-off-by: kangyi <kangyi9@h-partners.com> | 5 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| initial commit | 1 年前 |
| fix: move api from Terminator to Expression Signed-off-by: kangyi <kangyi9@h-partners.com> | 1 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| fix: simplify the inheritance hierarchy of Expression Signed-off-by: kangyi <kangyi9@h-partners.com> | 25 天前 |
| fix: func call in static init - Pass instantiated type args when translating calls inside static var init. - For non-virtual calls, use the resolved func decl instead of the top-overridden decl as the Invoke/Apply callee; keep GetTopOverridden only on the virtual path. Update InstCalleeInfo::originalFuncDecl docs and nearby comments to match. Signed-off-by: Mr_Kang_Yi <kangyi9@h-partners.com> | 1 天前 |
| initial commit | 1 年前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| fix: normalize the callee of the invoke expression Signed-off-by: Mr_Kang_Yi <kangyi9@h-partners.com> | 7 天前 |
| fix: move api from Terminator to Expression Signed-off-by: kangyi <kangyi9@h-partners.com> | 1 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| fix: move api from Terminator to Expression Signed-off-by: kangyi <kangyi9@h-partners.com> | 1 个月前 |
| fix: simplify the inheritance hierarchy of Expression Signed-off-by: kangyi <kangyi9@h-partners.com> | 21 天前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| fix: simplify the inheritance hierarchy of Expression Signed-off-by: kangyi <kangyi9@h-partners.com> | 25 天前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |
| feat: sync dev to main Signed-off-by: weinw <weiningwei@h-partners.com> | 3 个月前 |