test(lifetime): 新增 P3 负向工程(堆对象字段收下本帧栈地址)

NewLifetimeFieldEscapeTest:h.p = &local(h 由 new heap hlife 得到,字段活得比本帧长)必须报 LifetimeError;同步注册到 SequentialRegressionTest / regression_test / run_lifetime_negative_tests 与 README。
This commit is contained in:
TermiNexus committed 2026-10-08 22:47:40 +08:00
1 parent 399f396694
commit cd102989a8
6 files changed
+65 -5

No files matched your search

+3 -1
View File
@@ -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"]
ESCAPE_PROJECTS = ["EscapeTest", "EscapeOkTest", "EscapeMethodTest", "EscapeXmodTest", "NewTest", "NewLifetimeTest", "NewLifetimeWillFreeOkTest", "NewLifetimeFreeTest", "NewLifetimeAsyncTest", "NewLifetimeWillFreeTest", "NewLifetimeUseAfterFreeTest", "NewLifetimeWillFreeKwargTest", "NewLifetimeFieldEscapeTest"]
# 负向项目:**期望编译失败**且输出含指定关键字(反向判定,且不运行可执行文件)。
# 这些项目里的用例故意交出本帧栈地址(或跨模块摘要路径),必须被 M1–M2.3 的
@@ -61,6 +61,8 @@ NEGATIVE_PROJECTS = {
"NewLifetimeUseAfterFreeTest": "LifetimeError",
# P2:关键字实参路径(stdlib.free(p = p) 之后再用 p)
"NewLifetimeWillFreeKwargTest": "LifetimeError",
# P3:obj.f = &local(堆对象字段收下本帧栈地址)
"NewLifetimeFieldEscapeTest": "LifetimeError",
}
# IR 断言:项目名 → 生成 IR 中**必须出现**的子串。