fix(TransPyV): 修正形参/字段链节点的注解为 llvmlite.ParamNode*

c 类(源码违规):这些变量由 new_param_node 构造、或取自 get_struct_fields /

param_list_append / function_get_param_head,实际是 llvmlite.ParamNode 链节点,

注解却写成 llvmlite.Function*。旧的无条件指针 bitcast 掩盖了该错误,严格指针规则下暴露。

涉及:VarGenMixin / CallGenVt / VpiReader / ClassGenEnum / ClassGenVTable /

ExprGenName / FuncGenMixin / FuncGenDef / TypeGenResolve / TypeSpec /

StmtGenCifMixin / AssignGenMixin(纯注解替换,零语义变化)。15 行。
This commit is contained in:
TermiNexus committed 2026-09-28 17:54:13 +08:00
1 parent 70448f4590
commit d579d70113
12 files changed
+41 -35

No files matched your search

+5 -3
View File
@@ -1419,8 +1419,10 @@ def _resolve_vpi_ret_annot_str(pool: memhub.MemBuddy*,
inner_len_t += 1
if ret_annot[6 + inner_len_t] != ']' or inner_len_t == 0:
return None
tup_head_t: llvmlite.Function* = None
tup_tail_t: llvmlite.Function* = None
# tuple 返回类型的字段链表是 llvmlite.ParamNode(new_param_node / paramnode_set_next /
# Struct 形参均为 rawptr[ParamNode])——原先误注解为 Function*。
tup_head_t: llvmlite.ParamNode* = None
tup_tail_t: llvmlite.ParamNode* = None
tup_count_t: int = 0
p_t: sizet = 0
while p_t < inner_len_t:
@@ -1444,7 +1446,7 @@ def _resolve_vpi_ret_annot_str(pool: memhub.MemBuddy*,
stdlib.free(seg_buf_t)
if seg_ty_t is None:
return None
tup_node_t: llvmlite.Function* = llvmlite.new_param_node(pool, seg_ty_t)
tup_node_t: llvmlite.ParamNode* = llvmlite.new_param_node(pool, seg_ty_t)
if tup_node_t is None:
return None
if tup_head_t is None: