test: 新增 DefineTest 独立宏测试项目 + SprintfTest 多整数变参复现
- DefineTest: 从 TestProject3/definetest.vp 提取为独立项目(CDefine/c.CIf/c.CIfdef/c.CIfndef/platmacro, testcheck 分节), TestProject3 移除 definetest 引用 - SprintfTest: 增加 multi-int varargs repro R1-R4(带 check), 复现 viperlib.snprintf 第 2+ 个 int 变参读垃圾(va_arg 8 字节槽位 vs 调用点 i32 未扩展)
This commit is contained in:
1 parent
939f7f2497
commit
61f07d4f9b
4 files changed
+86
-33
No files matched your search
@@ -168,5 +168,36 @@ def main() -> int:
|
||||
viperlib.snprintf(buf, 128, "T10 %a|%.17g", v_pi17, v_pi17)
|
||||
testcheck.info(buf)
|
||||
|
||||
# ============================================================
|
||||
# 多整数变参复现(DefineTest test_define_string PAGE= 遗留 bug):
|
||||
# viperlib.snprintf 3+ 个 int 变参时, 第 2 个 %d 读到垃圾
|
||||
# (va_arg 游标从寄存器区切到溢出区推进错误, 非本次 CIf 引入)
|
||||
# 预期: R1-R3 目前 FAIL, 修复后应全部 PASS
|
||||
# ============================================================
|
||||
testcheck.section("multi-int varargs repro")
|
||||
|
||||
# R1: 3 个常量 int(复现 DefineTest "MAX_SIZE=%d PAGE=%d MASK=0x%x" 模式)
|
||||
viperlib.snprintf(buf, 128, "R1 %d|%d|%d", 1024, 4096, 255)
|
||||
testcheck.info(buf)
|
||||
testcheck.check(string.strcmp(buf, "R1 1024|4096|255") == 0, "R1 3-const-int (1024|4096|255)", "R1 FAIL (第2变参被误读)")
|
||||
|
||||
# R2: 3 个运行时变量 int(排除常量折叠差异)
|
||||
ia: t.CInt = 1024
|
||||
ib: t.CInt = 4096
|
||||
ic: t.CInt = 255
|
||||
viperlib.snprintf(buf, 128, "R2 %d|%d|%d", ia, ib, ic)
|
||||
testcheck.info(buf)
|
||||
testcheck.check(string.strcmp(buf, "R2 1024|4096|255") == 0, "R2 3-var-int (1024|4096|255)", "R2 FAIL (第2变参被误读)")
|
||||
|
||||
# R3: 4 个变参(游标推进进一步暴露)
|
||||
viperlib.snprintf(buf, 128, "R3 %d|%d|%d|%d", 1, 2, 3, 4)
|
||||
testcheck.info(buf)
|
||||
testcheck.check(string.strcmp(buf, "R3 1|2|3|4") == 0, "R3 4-int (1|2|3|4)", "R3 FAIL (变参游标推进错误)")
|
||||
|
||||
# R4: 第 2 个变参为 0(值 0 若被截断读也会暴露)
|
||||
viperlib.snprintf(buf, 128, "R4 %d|%d|%d", 100, 0, 200)
|
||||
testcheck.info(buf)
|
||||
testcheck.check(string.strcmp(buf, "R4 100|0|200") == 0, "R4 middle-zero (100|0|200)", "R4 FAIL (第2变参被误读)")
|
||||
|
||||
stdlib.free(buf)
|
||||
return 0
|
||||
Reference in new issue
Block a user