浏览代码

Fix for sparc64 specific code generation bug report #40252

Pierre Muller 2 年之前
父节点
当前提交
3bb2586269
共有 2 个文件被更改,包括 27 次插入1 次删除
  1. 2 1
      compiler/sparc64/cpupara.pas
  2. 25 0
      tests/webtbs/tw40252.pp

+ 2 - 1
compiler/sparc64/cpupara.pas

@@ -67,8 +67,9 @@ implementation
                              is_open_array(def) or
                              is_array_of_const(def) or
                              is_array_constructor(def);
+	  { Fix codegen problem for empty record by always passing by address a zero-sized record }
           recorddef:
-            result:=def.size>recsizelimit;
+            result:=(def.size>recsizelimit) or (def.size=0);
           variantdef:
             result:=false;
           formaldef :

+ 25 - 0
tests/webtbs/tw40252.pp

@@ -0,0 +1,25 @@
+
+type
+  TLazLoggerLogEnabled = record end;
+
+procedure Test(Log : TLazLoggerLogEnabled; const s : string);
+begin
+  writeln('Test: ',s);
+end;
+
+procedure Testv(var Log : TLazLoggerLogEnabled; const s : string);
+begin
+  writeln('Testv: ',s);
+end;
+
+procedure DebuglnStack(LogEnabled: TLazLoggerLogEnabled; const s: string);
+begin
+  Test(LogEnabled, s);
+  Testv(LogEnabled, s);
+end;
+
+var
+  LE : TLazLoggerLogEnabled;
+begin
+  DebuglnStack(LE,'Test string');
+end.