pgcrypto/des tests fail on riscv64 due to clang's code generation anomaly

From: Alexander Lakhin <exclusion(at)gmail(dot)com>
To: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Cc: Greg Burd <greg(at)burd(dot)me>
Subject: pgcrypto/des tests fail on riscv64 due to clang's code generation anomaly
Date: 2026-03-15 12:00:00
Message-ID: c64cbda0-7ef2-4762-8e70-9d0dedccc9cf@gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hello hackers,

As recent failures from greenfly, e.g. [1], show:
--- /home/gburd/build/HEAD/pgsql/contrib/pgcrypto/expected/crypt-des.out 2026-03-13 18:06:10.669824704 +0000
+++ /home/gburd/build/HEAD/pgsql.build/testrun/pgcrypto/regress/results/crypt-des.out 2026-03-13 18:38:39.830105127 +0000
@@ -4,13 +4,13 @@
 SELECT crypt('', 'NB');
      crypt
 ---------------
- NBPx/38Y48kHg
+ NB3TsPvodZDgs
 (1 row)

adding -march=rv64gcv to CFLAGS makes clang generate different (wrong?)
code for crypt-des.c. Namely, having reproduced the diff locally, with
this debugging addition:
--- a/contrib/pgcrypto/crypt-des.c
+++ b/contrib/pgcrypto/crypt-des.c
@@ -355,6 +355,11 @@ des_init(void)
     for (i = 0; i < 32; i++)
         un_pbox[pbox[i] - 1] = i;

+fprintf(stderr, "!!!des_init| un_pbox:");
+    for (i = 0; i < 32; i++)
+        fprintf(stderr, " %d", un_pbox[i]);
+fprintf(stderr, "\n");
+
     for (b = 0; b < 4; b++)

I can see the following during a normal execution of:
CREATE EXTENSION pgcrypto; SELECT crypt('', 'NB');
     crypt
---------------
 NBPx/38Y48kHg

!!!des_init| un_pbox: 8 16 22 30 12 27 1 17 23 15 29 5 25 19 9 0 7 13 24 2 3 28 10 18 31 11 21 6 4 26 14 20

vs:
     crypt
---------------
 NB3TsPvodZDgs

!!!des_init| un_pbox: 15 6 19 20 28 11 27 16 0 14 22 25 4 17 30 9 1 7 23 13 31 26 2 8 18 12 29 5 21 10 3 24

when the code compiled with CC=clang-20 CPPFLAGS="-march=rv64gcv".

I don't observe this issue with gcc-14, nor with this modification (using
clang-20, -march=rv64gcv):
        for (i = 0; i < 32; i++)
+{
                un_pbox[pbox[i] - 1] = i;
+pg_compiler_barrier();
+}

[1] https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=greenfly&dt=2026-03-13%2018%3A06%3A09

Best regards,
Alexander

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Álvaro Herrera 2026-03-15 12:11:00 Re: bug: pg_dumpall with --data-only and --clean options is giving an error after some dump
Previous Message Andrew Dunstan 2026-03-15 11:58:31 Re: bug: pg_dumpall with --data-only and --clean options is giving an error after some dump