test(lifetime): 补 P3 注解形态 + P2 方法级/取地址的自动工程
- 新增 NewLifetimeAnnFieldEscapeTest:h.p: int* = &local → LifetimeError(P3 注解形态) - 新增 NewLifetimeWillFreeMethodTest:r.Release(p) 后再用 p → LifetimeError(方法级标注,形参位含 self 偏移) - 新增 NewLifetimeWillFreeAddrTest:stdlib.free(p) 后 &p → LifetimeError(取地址路径) - NewLifetimeTest.CaseAnnFieldStore:p.x: int = 42 必须真的写进字段(正向) - 注册进 SequentialRegressionTest / regression_test / run_lifetime_negative_tests + README
This commit is contained in:
1 parent
64b0cc84f6
commit
5fa5a9f37c
11 files changed
+201
-5
No files matched your search
@@ -41,7 +41,7 @@ OVERVIEW = os.path.join(TEST_DIR, "README.md")
|
||||
# NewLifetimeFreeTest / NewLifetimeAsyncTest / NewLifetimeWillFreeTest /
|
||||
# NewLifetimeUseAfterFreeTest(负向);
|
||||
# 仓库根下:EscapeTest/EscapeOkTest/EscapeMethodTest/EscapeXmodTest
|
||||
ESCAPE_PROJECTS = ["EscapeTest", "EscapeOkTest", "EscapeMethodTest", "EscapeXmodTest", "NewTest", "NewLifetimeTest", "NewLifetimeWillFreeOkTest", "NewLifetimeFreeTest", "NewLifetimeAsyncTest", "NewLifetimeWillFreeTest", "NewLifetimeUseAfterFreeTest", "NewLifetimeWillFreeKwargTest", "NewLifetimeFieldEscapeTest"]
|
||||
ESCAPE_PROJECTS = ["EscapeTest", "EscapeOkTest", "EscapeMethodTest", "EscapeXmodTest", "NewTest", "NewLifetimeTest", "NewLifetimeWillFreeOkTest", "NewLifetimeFreeTest", "NewLifetimeAsyncTest", "NewLifetimeWillFreeTest", "NewLifetimeUseAfterFreeTest", "NewLifetimeWillFreeKwargTest", "NewLifetimeWillFreeMethodTest", "NewLifetimeWillFreeAddrTest", "NewLifetimeFieldEscapeTest", "NewLifetimeAnnFieldEscapeTest"]
|
||||
|
||||
# 负向项目:**期望编译失败**且输出含指定关键字(反向判定,且不运行可执行文件)。
|
||||
# 这些项目里的用例故意交出本帧栈地址(或跨模块摘要路径),必须被 M1–M2.3 的
|
||||
@@ -61,8 +61,14 @@ NEGATIVE_PROJECTS = {
|
||||
"NewLifetimeUseAfterFreeTest": "LifetimeError",
|
||||
# P2:关键字实参路径(stdlib.free(p = p) 之后再用 p)
|
||||
"NewLifetimeWillFreeKwargTest": "LifetimeError",
|
||||
# P2:方法级标注(r.Release(p) 之后再用 p;形参位含 self 偏移)
|
||||
"NewLifetimeWillFreeMethodTest": "LifetimeError",
|
||||
# P2:取地址路径(stdlib.free(p) 之后 &p)
|
||||
"NewLifetimeWillFreeAddrTest": "LifetimeError",
|
||||
# P3:obj.f = &local(堆对象字段收下本帧栈地址)
|
||||
"NewLifetimeFieldEscapeTest": "LifetimeError",
|
||||
# P3:obj.f: T = &local(注解形态的属性目标,同一条规则;防"非 Name 目标被静默丢弃")
|
||||
"NewLifetimeAnnFieldEscapeTest": "LifetimeError",
|
||||
}
|
||||
|
||||
# IR 断言:项目名 → 生成 IR 中**必须出现**的子串。
|
||||
|
||||
Reference in new issue
Block a user