test(lifetime): 新增 NewLifetimeAsyncTest 负向工程;测试项目 main 统一为 export def main() -> int

- NewLifetimeAsyncTest:协程体里的 new heap slife 必须报 LifetimeError(fail-fast 的回归覆盖),已挂进 ESCAPE_PROJECTS / NEGATIVE_PROJECTS / NEGATIVE_PROJECT_NAMES 与 README。

- NewLifetimeTest / NewLifetimeFreeTest 的 main 改为 export def main() -> int,并删掉多余的 t/c 导入(与 FuncTest / FormatStringTest / NewTest 一致)。
This commit is contained in:
TermiNexus committed 2026-10-08 20:42:14 +08:00
1 parent 07fbb4d0a2
commit 1724874967
8 files changed
+71 -15

No files matched your search

+5 -3
View File
@@ -36,10 +36,10 @@ OVERVIEW = os.path.join(TEST_DIR, "README.md")
# ============================================================
# 单独运行支持:--escape / --only
# ============================================================
# escape 相关项目(生命期/逃逸检查 + M2.4 new 描述符 + M3 owned slife RAII):
# Test/ 下:NewTest、NewLifetimeTest(正向)、NewLifetimeFreeTest(负向);
# escape 相关项目(生命期/逃逸检查 + M2.4 new 描述符 + M3 owned slife RAII + §3.6 析构):
# Test/ 下:NewTest、NewLifetimeTest(正向)、NewLifetimeFreeTest / NewLifetimeAsyncTest(负向);
# 仓库根下:EscapeTest/EscapeOkTest/EscapeMethodTest/EscapeXmodTest
ESCAPE_PROJECTS = ["EscapeTest", "EscapeOkTest", "EscapeMethodTest", "EscapeXmodTest", "NewTest", "NewLifetimeTest", "NewLifetimeFreeTest"]
ESCAPE_PROJECTS = ["EscapeTest", "EscapeOkTest", "EscapeMethodTest", "EscapeXmodTest", "NewTest", "NewLifetimeTest", "NewLifetimeFreeTest", "NewLifetimeAsyncTest"]
# 负向项目:**期望编译失败**且输出含指定关键字(反向判定,且不运行可执行文件)。
# 这些项目里的用例故意交出本帧栈地址(或跨模块摘要路径),必须被 M1–M2.3 的
@@ -52,6 +52,8 @@ NEGATIVE_PROJECTS = {
"EscapeXmodTest": "LifetimeError",
# M3 §4.3 判据5:对 slife 对象手动 free → LifetimeError
"NewLifetimeFreeTest": "LifetimeError",
# M3 §4.2:协程体(async)里的 `new heap slife` → 释放点无法确定,fail-fast
"NewLifetimeAsyncTest": "LifetimeError",
}
# IR 断言:项目名 → 生成 IR 中**必须出现**的子串。