On 4. Nov 2025, at 14.12, adesh--- via dovecot <[email protected]> wrote:
> 
> When building Dovecot 2.4.2 on modern compilers (GCC ≥ 5, Clang, or any 
> C99/C11-compliant environment), the build fails in
> src/lib/unicode-transform.c due to the use of non-constant initializers in 
> static const global variables.
> 
> The affected lines define Hangul composition constants using other const 
> variables instead of compile-time constants, which is not allowed in standard 
> C99 and later.
> 
> error log:
> unicode-transform.c:211:1: error: initializer element is not constant
> static const size_t uni_hangul_n_count = uni_hangul_v_count * 
> uni_hangul_t_count;
> ^
> unicode-transform.c:212:1: error: initializer element is not constant
> static const uint16_t uni_hangul_l_end = uni_hangul_l_base + 
> uni_hangul_l_count;
> ^
> unicode-transform.c:213:1: error: initializer element is not constant
> static const uint16_t uni_hangul_v_end = uni_hangul_v_base + 
> uni_hangul_v_count;
> ^
> unicode-transform.c:214:1: error: initializer element is not constant
> static const uint16_t uni_hangul_t_end = uni_hangul_t_base + 
> uni_hangul_t_count;
> ^

Need to fix it, but ..

> This issue prevents building Dovecot 2.4.x on modern systems without 
> non-standard compiler flags, breaking out-of-the-box builds on up-to-date 
> Linux distributions.

This can't be true. We've been compiling it with latest distros, and we don't 
see such compiling errors. For example locally I have clang 18.1.3 and gcc 
13.3.0, and I can't get these errors with any -std options. Does it compile 
with the following patch? Unlikely to be the final fix, but I just want to know 
if there are other issues:

diff --git a/src/lib/unicode-transform.c b/src/lib/unicode-transform.c
index 3be88f7a0b..58bd1c1e04 100644
--- a/src/lib/unicode-transform.c
+++ b/src/lib/unicode-transform.c
@@ -201,13 +201,13 @@ unicode_static_array_sink_input(struct unicode_transform 
*trans,
  * Hangul syllable (de)composition
  */

-static const uint16_t uni_hangul_s_base = 0xac00;
-static const uint16_t uni_hangul_l_base = 0x1100;
-static const uint16_t uni_hangul_v_base = 0x1161;
-static const uint16_t uni_hangul_t_base = 0x11a7;
-static const size_t uni_hangul_l_count = 19;
-static const size_t uni_hangul_v_count = 21;
-static const size_t uni_hangul_t_count = 28;
+#define uni_hangul_s_base 0xac00
+#define uni_hangul_l_base 0x1100
+#define uni_hangul_v_base 0x1161
+#define uni_hangul_t_base 0x11a7
+#define uni_hangul_l_count 19
+#define uni_hangul_v_count 21
+#define uni_hangul_t_count 28
 static const size_t uni_hangul_n_count = uni_hangul_v_count * 
uni_hangul_t_count;
 static const uint16_t uni_hangul_l_end = uni_hangul_l_base + 
uni_hangul_l_count;
 static const uint16_t uni_hangul_v_end = uni_hangul_v_base + 
uni_hangul_v_count;


_______________________________________________
dovecot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to