test(lifetime): 新增 willFree 正/负向工程并注册到回归脚本
NewLifetimeWillFreeTest(二次 free)、NewLifetimeUseAfterFreeTest(释放后使用)为负向;NewLifetimeWillFreeOkTest 验证合法用法与重赋值清除失效态。同步更新 SequentialRegressionTest / regression_test / run_lifetime_negative_tests 与 README。
This commit is contained in:
1 parent
9a2b09e606
commit
aed57de44c
10 files changed
+184
-9
No files matched your search
@@ -0,0 +1,21 @@
|
||||
from stdint import *
|
||||
import stdlib
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# 负向工程(**应当编译失败**,对照工程:NewLifetimeWillFreeOkTest)
|
||||
#
|
||||
# P2 willFree 标注驱动:`includes/stdlib.vp` 的 free 带 `@life(willFree(p))`,
|
||||
# 语义 = "该实参所指对象在本调用返回后失效"。编译器读到被调者的该标注后,把对应
|
||||
# **实参变量槽**标为"已失效",其后再读/传/再 free → LifetimeError(fail-fast)。
|
||||
#
|
||||
# 本工程:第二次 free(p) 必须在编译期被拒(p 在第一次 free 后已失效)。
|
||||
# 期望报错:LifetimeError。
|
||||
# =============================================================================
|
||||
|
||||
|
||||
export def main() -> int:
|
||||
p: rawptr = stdlib.malloc(8)
|
||||
stdlib.free(p)
|
||||
stdlib.free(p) # ← 必须被拒:p 已失效(二次释放)
|
||||
return 0
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/TermiNexus/TransPyC/main/schemas/project-schema.json",
|
||||
"name": "NewLifetimeWillFreeTest",
|
||||
"version": "1.0.0",
|
||||
"source_dir": "./App",
|
||||
"build_dir": "./.tpv_build",
|
||||
"compiler": {
|
||||
"cmd": "llc",
|
||||
"flags": ["-filetype=obj", "-relocation-model=pic"]
|
||||
},
|
||||
"linker": {
|
||||
"cmd": "clang++",
|
||||
"flags": ["-lmsvcrt", "-lucrt", "-lpthread", "-lmingwex", "-lkernel32"],
|
||||
"output": "NewLifetimeWillFreeTest.exe"
|
||||
},
|
||||
"includes": [
|
||||
"../../includes"
|
||||
],
|
||||
"target": {
|
||||
"triple": "x86_64-pc-windows-gnu",
|
||||
"datalayout": "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||
},
|
||||
"options": {
|
||||
"slice_level": 3,
|
||||
"sha1_slice_level": 1,
|
||||
"target": "llvm",
|
||||
"strict_mode": true
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user