[PATCH] Fix for sparc64 specific code generation bug report #40252
authorPierre Muller <pierre@freepascal.org>
Fri, 26 May 2023 15:09:47 +0000 (17:09 +0200)
committerAbou Al Montacir <abou.almontacir@sfr.fr>
Mon, 18 Dec 2023 22:01:08 +0000 (23:01 +0100)
Gbp-Pq: Name 6-3bb2586269c876856a834fb0d72a09928ff9d16b.patch

fpcsrc/compiler/sparc64/cpupara.pas
fpcsrc/tests/webtbs/tw40252.pp [new file with mode: 0644]

index 453e88e4387444664a942fbaf62318a942870399..840ae4aa66e7dba2e6d4a997d94220fe33d04976 100644 (file)
@@ -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 :
diff --git a/fpcsrc/tests/webtbs/tw40252.pp b/fpcsrc/tests/webtbs/tw40252.pp
new file mode 100644 (file)
index 0000000..aca68f1
--- /dev/null
@@ -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.