Fixed
This commit is contained in:
@@ -7,7 +7,7 @@ import stdio
|
||||
from linkedlist import GSListNode, GSList
|
||||
from .__types import LLVMType, TypePrint
|
||||
from .__values import Value, new_value, SSAValue
|
||||
from .__function import Function, BasicBlock, block_append_text, function_move_block_to_end, _ll_name_needs_quote
|
||||
from .__function import Function, BasicBlock, block_append_text, block_set_terminated, block_get_terminated, function_move_block_to_end, _ll_name_needs_quote
|
||||
|
||||
# ============================================================
|
||||
# IRBuilder: 游标式 IR 指令发射器
|
||||
@@ -104,20 +104,19 @@ def _emit(builder: IRBuilder | t.CPtr, text: t.CChar | t.CPtr):
|
||||
def _mark_terminated(builder: IRBuilder | t.CPtr):
|
||||
"""标记当前块已终止"""
|
||||
if builder is None or builder.CurBlock is None: return
|
||||
builder.CurBlock.IsTerminated = 1
|
||||
block_set_terminated(builder.CurBlock, 1)
|
||||
|
||||
|
||||
def builder_cur_block_is_terminated(builder: IRBuilder | t.CPtr) -> t.CInt:
|
||||
"""检查当前块的 IsTerminated 标志
|
||||
|
||||
供其他模块绕过 stub 类型限制使用:
|
||||
builder.CurBlock.IsTerminated 在 stub 类型中 BasicBlock 为 opaque,
|
||||
直接访问会被 TransPyC 静默跳过(不生成 GEP,不报错),
|
||||
导致返回寄存器残留值,br 回边指令被错误跳过。
|
||||
通过 block_get_terminated 辅助函数访问,避免链式属性
|
||||
builder.CurBlock.IsTerminated 在跨模块场景下 BasicBlock 为 opaque
|
||||
导致的 GEP 静默跳过问题。
|
||||
"""
|
||||
if builder is None or builder.CurBlock is None:
|
||||
return 1
|
||||
return builder.CurBlock.IsTerminated
|
||||
return block_get_terminated(builder.CurBlock)
|
||||
|
||||
|
||||
# ============================================================
|
||||
|
||||
Reference in New Issue
Block a user