Skip to content

docs(批8 条目1): dex? 泛型实例化 T0 重测 + §1-1 回填——(乙) 已消解 · 剩余 =(甲) · ELF 腿降级(doc-only,解锁 S3 前置件) - #129

Merged
dslsdzc merged 2 commits into
developfrom
feature/b8-e1-t0
Sep 18, 2026

Conversation

@dslsdzc

@dslsdzc dslsdzc commented Sep 18, 2026

Copy link
Copy Markdown
Owner

性质

只读取数 + 落纸(doc-only,零源码改动)。本 PR 是解锁 S3 的前置件(lead 裁 ③)。

内容(两件)

  1. 新:docs/superpowers/plans/2026-09-18-b8-e1-t0.md(T0 重测报告;起点 develop@origin = 41a51d8d;工作区 b8e1-ws)
  2. 回填:docs/superpowers/plans/2026-09-17-silence-closure.md §1-1
    • 回填由 b8-e1 执行(一次性),plan-verikernel 已知会并暂停改该文件
    • 纪律:只做替换与新增;旧文本(更正注 / 真问题分裂 / 现象 / 最小复现 / 机理 / 修法方向 / 判据要件 / 突变自证 / 停条件)逐字保留,新增「✅ T0 回填」块(含逐行作废标注)

一、结论(一句话)

(乙) 已消解(并已实测确认对同型实参生效);剩余 = (甲) 实参类型不校验。
探针仍静默错值:check=0 · build=0 · interp=15(确定);ELF 腿 = 非确定垃圾。

二、M1 三态读数(原探针逐字)

腿 读数 实测/推断
check 0(仅 1 行 [S1-ARG] line=4 col=52 pi=1 p=T? a=dex) 实测
build 0(lower done: 18 funcs, 1747 instrs,零 error[) 实测
interp 15(3/3 一致;= 4619567317775286272 / 10^6 % 256,即 7.0 的 binary64 位模式未转换) 实测(确定值)
ELF 非确定:97 次运行命中 142 仅 1 次(首轮 30 次批内);复跑 60 次 0 次;7 命中 0、255 命中 0;关 ASLR 稳定 rc=208 实测(非确定值)

判定:否——(乙) 未把该探针带到 7/7。
A/B(pre-#121 二进制 /tmp/ge-pre/corec):本探针两态行为相同(哑火);同型实参 g(d, d) 两态由垃圾变 7 ⇒ (乙) 修的是同型、不是本例。(实测)

补:打印探针读到被读值 = 栈地址(setarch -R 下稳定 0x7FFFFFFFE0C8)⇒ ELF 垃圾来自未初始化 GP 寄存器(四读数合推,未做 gdb/反汇编级确认)。

三、剩余机理(读码 + 最小实验;行锚 = 41a51d8d)

  1. unify_types(checker.cr:1926)只有 == / TYP_GENERIC_PARAM / TYP_GENERIC_APPLY 三条规则;T?(内层泛型参数)落兜底 type_compat_strict ⇒ 恒假且不绑定 ⇒ 后续实参既不绑定也不校验(仅 [S1-ARG] report-only)。(读码)
  2. 首实参 1 把 T 绑成 int ⇒ 实例 = g[int]。(实测):首参给 struct P 时实例 = g[P](非 ir_gen 回落路径的 g[unit])⇒ 实例键来自 checker 的调用点绑定段。
  3. --dump-params 槽型直读:PARAM g[int] p1 x slot=0(TI_INT/GP)。(实测)
  4. 重定向后第二遍 dex_align_call_args(ir_gen.cr:2260)按实例 int? 判门 ⇒ 不发转换;.cir = call g[int](_arg, _arg)(无 _dxsc)。(实测)
  5. ⇒ apx 实参(bits,XMM 类)入 TI_INT(GP 类)槽 ⇒ ELF 垃圾;interp 按位置拷贝位模式 ⇒ 15。(推理链,与 2–4 的实测一致)

为什么既有绿例是绿的(实测):x: dex(具体)形参第一遍环即命中 ⇒ 发转换 ⇒ 7(test_apx_conversion.py 的 nonreg_generic_dex_param、tests/suite/apx_conversion_test.cr 的 generic7 都是这一形;与本探针的唯一差别是形参写 dex 还是 T?);scaled 实参(GP 类)与 TI_INT 槽表示巧合相同 ⇒ 也得 7。两者都不是「实参类型被校验过」。

四、lead 三裁的落实位置(均在 §1-1 回填块内)

  • 裁 ①(判据形态改,ELF 腿降级):回填块 ② Ⅰ–Ⅵ —— 确定性腿为主(interp=15 + .cir 调用点 + --dump-params 槽型);ELF 腿只作「≠7」+ N≥10 次采样不复现 7,不得写「= 某值」;「禁第三态」对非确定值域不适用 ⇒ 改判「必须可复现」;并升为通用纪律:读数进判据前须先证 N≥10 次采样稳定。
  • 裁 ②(「期望 7」作废):回填块 ③ —— g(1, d) 中 T 由首实参定 int、第二实参 dex 与 int? 不符 ⇒ 应拒;(甲) 修复后本探针 = rc=1 被拒;要「得 7」需另裁推断方向(字面量多态 / 多实参联合绑定 T)⇒ 单独立条目登记,本批不实现。
  • 裁 ③(S3 前置,改排期):回填块 ④ —— [S1-ARG] 对 T? 模式恒报,含 g(d, d)(实例 g[dex]、ELF=7)、g2(d)(正是 (乙) 套件 C4 断言的正确形态)、g2(int) 等已正确编译的合法调用 ⇒ 先 (甲)(含 unify_types 的 T? 规则)→ 再 S3,顺序不许颠倒。(实测:5 例命中的误报面)
  • 新增停条件:任何修法若需改 unify_types 既有三条规则的语义(而非新增 T? 分支)⇒ 停下报 lead。

五、判据网缺口(须随 (甲) 一并补;回填块 ⑥)

T? 形参 + 类型冲突的多实参形态(本探针)·「类型不符实参必须被拒」· return g2(x) 位 · Some(…) 实参位 ⇒ 当前零覆盖(后两者当前实测 TF01 硬错,属同族相邻缺陷,未定位根因)。
(M3 另有:tests/ 里同形绿例在场但形参是具体 dex;T? 泛型形参唯一覆盖 = test_generic_param_erasure.py 的单形参 g2[T](x: T?)。)

六、六项「没做到的」(照抄 T0 报告 §④,不藏)

  1. 未做 gdb/反汇编级确认(「读未初始化 GP 寄存器」是四读数合推的强推断);
  2. 未插桩打印 g_gen_binds 段内容(实例键来源由实验 N 反推);
  3. A/B 两态编译器并非只差 fix: (乙) 泛型实例形参擦除——实例形参链具体化(A1)+ 槽型直读判据通道 + 判据套件(C1–C7) #121,未做单提交回退验证;
  4. 「CI 门对 tests/suite/*.cr 覆盖口径」未复核;
  5. M2 末三个相邻缺陷(return g2(x) TF01 / Some(…) 实参 TF01 / S1 误报)只最小复现,未定位根因;
  6. 未跑全量回归/CI(本轮性质所限);未碰 src/arch/**、src/os/linux/callseq.cr、src/format/**;未跑 full-bootstrap(避 /tmp/corec2|corec3 撞车)。

七、守门(本轮实测)

test_generic_constr.py 15/15 · test_cache_identity.py 6/6 · test_cir_warm_path.py 19/19 · test_generic_param_erasure.py ALL PASS (C1–C7) —— 全绿;nice -n 19 构建(corec sha256 b5cdd49d…、corearch 9af0b8b3…)。

起点 develop@origin = 41a51d8(工作区 b8e1-ws,nice -n 19 重建 corec/corearch)。
只读取数 + 落纸:本提交只含这一份报告文件,零源码改动。

M1 重测(原探针逐字):check=0 · build=0 · interp=15(确定)· ELF=非确定垃圾
(60 次采样:7 命中 0 · 255 命中 0 · 142 命中 0;打印探针读到的是栈地址,
ASLR 关时稳定 rc=208)⇒ 计划书「ELF 142」= 分布样本,不得作锚定值。
判定:**(乙) 未把该探针带到 7/7**。

M2 定位:剩余 = (甲) 实参类型不校验,触发条件 = unify_types 无 T? 模式规则
⇒ 后续实参既不绑定也不校验 ⇒ 实例由首实参单方决定(g[int],槽 slot=0/GP)
⇒ 重定向后第二遍对齐环按实例 int? 判门 ⇒ 不发转换 ⇒ 表示/ABI 失配。
A/B(pre-#121)实证:本探针两态同行为(哑火);同型实参 g(d,d) 两态从垃圾变 7。
新增:S1-ARG 对 T? 恒报(含合法码)⇒ S3 升硬错前必须先补 T? 规则。

M3 判据网:同形绿例(x: dex 具体形参)在场且绿;T? 形参 + 类型冲突多实参 = 零覆盖;
「类型不符实参必须被拒」= 零覆盖。M4 兄弟面 #2026-09-18-10 复现(55/56),未修。

停条件:无命中;四套件(generic_constr 15/15 · cache_identity 6/6 · cir_warm 19/19 ·
generic_param_erasure ALL PASS)全绿。
回填执行 = b8-e1(plan-verikernel 已知会并暂停改该文件;本次为一次性回填)。
纪律:只做替换与新增,旧文本逐字保留 + 新增「⚠ 更正注」式回填块(不删原文)。

回填内容(2026-09-17-silence-closure.md §1-1):
- 现状与剩余机理:(乙) 已消解、剩余 = (甲) 实参类型不校验;
  unify_types 无 T? 规则 ⇒ 后续实参既不绑定也不校验;实例 g[int](走 checker 绑定段);
  第二遍对齐环按实例 int? 判门 ⇒ 不发转换 ⇒ bits 入 GP 槽 ⇒ ELF 垃圾。
- 裁 ①(判据形态改):确定性腿为主(interp=15 + .cir 调用点 + --dump-params 槽型);
  ELF 腿降为弱腿(只作 ≠7 + N≥10 次采样不复现 7,不得写 = 某值);「禁第三态」对
  非确定值域不适用,改判「必须可复现」;升为通用纪律:读数进判据前须证 N≥10 稳定。
- 裁 ②(「期望 7」作废):(甲) 修复后本探针 = rc=1 被拒;要得 7 需另裁推断方向
  (字面量多态 / 多实参联合绑定),单独立条目、本批不实现。
- 裁 ③(S3 前置,改排期):[S1-ARG] 对 T? 恒报(含合法码)⇒ 先 (甲)(含 T? 规则)→ 再 S3。
- 新增停条件:若需改 unify_types 既有三条规则的语义(而非新增 T? 分支)⇒ 停下报 lead。
- 判据网缺口六项(多实参 T? 形态 / 类型不符必须拒 / return 位 / Some(…) 位等)当前零覆盖。

同批附带:T0 报告 §③ 采样计数精度修订(90 → 97 次运行,142 命中 1 次)。
零源码改动(doc-only)。
@dslsdzc
dslsdzc merged commit 922fd66 into develop Sep 18, 2026
4 checks passed
@dslsdzc
dslsdzc deleted the feature/b8-e1-t0 branch September 18, 2026 12:33
dslsdzc added a commit that referenced this pull request Sep 18, 2026
…+ 排除法成因,明写机制未查明

实测三读数(同一批探针跨基点):41a51d8d = check rc=0 + 1 条 [S1-ARG] · 965052b(2(a) 后)= rc=1 error[TF01]
(g2(d)/g2(x:int)/g2(Some(3))/return g2(x)/f := g2(x);return f 五项全 rc=1)· 批 1 修后五项全 rc=0。
成因 = 排除法定位到 #132(区间内 #129/#130/#131 皆文档面,唯一代码提交是 2(a))。
**机制未查明**(不得据本条推断机理;先例 = #2026-09-17-5 的读码机理被 T0 推翻并带下游判据作废)。
方法学(供后续批次照做):「批声明的范围」≠「批的实际影响面」⇒ 凡改 checker.cr 的批,收尾宜对已知敏感面
跨基点复测同类案例。状态 = 已消解(判据 = tests/selfhost/test_topt_pattern.py C7)。
(映射表行 + ### 段两处齐备;test_todo_id_migration 全绿:J3 新 id 139 / 标题 139)
dslsdzc added a commit that referenced this pull request Sep 18, 2026
…(判据 C1–C7 两向钉子 + 突变自证) (#133)

* fix(批8 (甲) 批1 刀1): unify_types 的 T? 模式规则(只加分支,不改既有三条规则语义)

根因(实测):unify_types 三条规则外的 `T?`(TYP_OPTIONAL,内层泛型参数)落兜底
type_compat_strict(concrete, pattern) ⇒ 内层**不代入、不绑定、恒假** ⇒ 泛型调用里 `T?`
形参的实参既不绑定也不校验,且 [S1-ARG] report-only 打点对 `T?` **恒报**(含已正确编译的
合法调用 —— 它们此前靠 ir_gen 旧路径恰好正确)。

修复:新增 `pk == TYP_OPTIONAL` 分支(① concrete 亦 optional ⇒ 内层对内层;② 否则裸值入
T? ⇒ 内层对 concrete),内层是泛型参数时由既有 TYP_GENERIC_PARAM 分支绑定/比对。
**既有三条规则逐字未动;不改任何调用点。**

判据(tests/selfhost/test_topt_pattern.py,已挂 src/ci/run.sh selfhost-tests;**两向钉子**):
C1 五例合法调用(C6 g(d,d) / C7 g2(d) / J / K / M)[S1-ARG] 由 1 → **0**;
C2 g(1,d) 真错仍**恰 1** 条(防「一律不报」);C3 实例键与调用点转换不变
(g[dex] / g2[dex] / call g2[dex](_dxsc));C5 槽型直读 slot=8;C4 非泛型面零足迹对照。

批次判据(与当批起点读数相同):check src/compiler rc=0 · ^error[ = 0(起点 0)·
selftest-types 415/415(起点 415/415)· canary 5/5 且五值逐字节同改前 ·
停条件六套件全绿(test_optional 80/80 · test_arg_inference_gap 全绿 · test_generic_constr 15/15 ·
test_generic_param_erasure ALL PASS · test_cache_identity 6/6 · test_cir_warm_path 19/19)。

行为变更(显式登记):`T?` 的 S1-ARG 误报消失(诊断面)+ 该模式下的泛型绑定由「不绑定」
变为「绑定」;产物面零足迹(canary 五值 + 六套件均同改前)。

* docs(TODO #2026-09-18-20): 登记「T? 形参单泛型调用在 2(a) 后由静默升级为硬错 TF01」——只登事实 + 排除法成因,明写机制未查明

实测三读数(同一批探针跨基点):41a51d8d = check rc=0 + 1 条 [S1-ARG] · 965052b(2(a) 后)= rc=1 error[TF01]
(g2(d)/g2(x:int)/g2(Some(3))/return g2(x)/f := g2(x);return f 五项全 rc=1)· 批 1 修后五项全 rc=0。
成因 = 排除法定位到 #132(区间内 #129/#130/#131 皆文档面,唯一代码提交是 2(a))。
**机制未查明**(不得据本条推断机理;先例 = #2026-09-17-5 的读码机理被 T0 推翻并带下游判据作废)。
方法学(供后续批次照做):「批声明的范围」≠「批的实际影响面」⇒ 凡改 checker.cr 的批,收尾宜对已知敏感面
跨基点复测同类案例。状态 = 已消解(判据 = tests/selfhost/test_topt_pattern.py C7)。
(映射表行 + ### 段两处齐备;test_todo_id_migration 全绿:J3 新 id 139 / 标题 139)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant