From 0beb8f5e5527a03c29e775fba564ba497060d955 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sun, 18 Oct 2026 22:37:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(func):=20extern=20def=20=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E7=94=9F=E6=88=90=E7=A9=BA=E5=87=BD=E6=95=B0=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stdio.printf 等 extern 声明此前被发射为 ret 0 的空 define,覆盖 C runtime 实现导致所有输出为空;现在只保留 declare。 --- lib/core/Handles/HandlesFunctions.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/core/Handles/HandlesFunctions.py b/lib/core/Handles/HandlesFunctions.py index 768ed32..b72ec90 100644 --- a/lib/core/Handles/HandlesFunctions.py +++ b/lib/core/Handles/HandlesFunctions.py @@ -1329,6 +1329,9 @@ class FunctionHandle(BaseHandle): return old_func def _EmitFunctionLlvm(self, Node: ast.FunctionDef, Gen: LlvmCodeGenerator, ClassName: str | None = None, extra_params: list[tuple[str, ir.Type]] | None = None) -> ir.Function | None: + if getattr(Node, 'Extern', False) or 'extern' in (getattr(Node, 'Markers', None) or ()): + # extern def 只有声明,不发射函数体(否则会生成空 define 覆盖 C runtime 实现) + return if self._is_generic_function(Node): return FuncName, RawFuncName, func_meta = self._compute_func_name_meta(Node, ClassName)