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

+3 -3
View File
@@ -956,15 +956,15 @@ novirtual class ClassGenEnum(ClassGenBase.ClassGenBase):
i32_ty: llvmlite.LLVMType* = llvmlite.Int32(pool)
i64_ty: llvmlite.LLVMType* = llvmlite.Int64(pool)
first_node: llvmlite.Function* = None
tail_node: llvmlite.Function* = None
first_node: llvmlite.ParamNode* = None
tail_node: llvmlite.ParamNode* = None
for pos in range(total_positions):
psize: int = position_max_sizes[pos]
field_ty: llvmlite.LLVMType* = i32_ty
if psize > 4:
field_ty = i64_ty
pnode: llvmlite.Function* = llvmlite.new_param_node(pool, field_ty)
pnode: llvmlite.ParamNode* = llvmlite.new_param_node(pool, field_ty)
if pnode is None:
continue
tail_node = llvmlite.param_list_append(first_node, tail_node, pnode)
+6 -6
View File
@@ -305,10 +305,10 @@ novirtual class ClassGenVTable(ClassGenBase.ClassGenBase):
i8_ty: llvmlite.LLVMType* = llvmlite.Int8(pool)
i8_ptr_ty: llvmlite.LLVMType* = llvmlite.Ptr(pool, i8_ty)
first_node: llvmlite.Function* = None
tail_node: llvmlite.Function* = None
first_node: llvmlite.ParamNode* = None
tail_node: llvmlite.ParamNode* = None
for i in range(method_count):
pnode: llvmlite.Function* = llvmlite.new_param_node(pool, i8_ptr_ty)
pnode: llvmlite.ParamNode* = llvmlite.new_param_node(pool, i8_ptr_ty)
if pnode is None:
continue
tail_node = llvmlite.param_list_append(first_node, tail_node, pnode)
@@ -1120,10 +1120,10 @@ novirtual class ClassGenVTable(ClassGenBase.ClassGenBase):
vt_i8_ty: llvmlite.LLVMType* = llvmlite.Int8(pool)
vt_i8_ptr_ty: llvmlite.LLVMType* = llvmlite.Ptr(pool, vt_i8_ty)
vt_first_node: llvmlite.Function* = None
vt_prev_node: llvmlite.Function* = None
vt_first_node: llvmlite.ParamNode* = None
vt_prev_node: llvmlite.ParamNode* = None
for vti in range(vt_method_count):
vtnode: llvmlite.Function* = llvmlite.new_param_node(pool, vt_i8_ptr_ty)
vtnode: llvmlite.ParamNode* = llvmlite.new_param_node(pool, vt_i8_ptr_ty)
if vtnode is None:
continue
if vt_first_node is None: