java-readline icon indicating copy to clipboard operation
java-readline copied to clipboard

Build failure with GCC 14 (initialization from incompatible pointer type)

Open ebourg opened this issue 1 year ago • 1 comments

Hi,

Readline fails to build with GCC 14, we get the following error in Debian:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1075200

gcc -I /usr/lib/jvm/default-java/include -I /usr/lib/jvm/default-java/include/linux -I /usr/lib/jvm/default-java/include -I /usr/lib/jvm/default-java/include/linux -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libreadline-java-0.8.0.1+dfsg=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -fPIC -DPOSIX -fPIC -DPOSIX -DJavaReadline \
                                   -c org_gnu_readline_Readline.c
org_gnu_readline_Readline.c:85:3: error: initialization of 'int *' from incompatible pointer type 'long unsigned int *' [-Wincompatible-pointer-types]
   85 |   &rl_readline_state,
      |   ^
org_gnu_readline_Readline.c:85:3: note: (near initialization for 'globalIntegerInternals[2]')
org_gnu_readline_Readline.c:120:14: error: initialization of 'char **' from incompatible pointer type 'const char **' [-Wincompatible-pointer-types]
  120 |  /* const */ &rl_library_version,
      |              ^
org_gnu_readline_Readline.c:120:14: note: (near initialization for 'globalStringInternals[0]')
org_gnu_readline_Readline.c:121:14: error: initialization of 'char **' from incompatible pointer type 'const char **' [-Wincompatible-pointer-types]
  121 |  /* const */ &rl_readline_name,
      |              ^
org_gnu_readline_Readline.c:121:14: note: (near initialization for 'globalStringInternals[1]')
org_gnu_readline_Readline.c:124:14: error: initialization of 'char **' from incompatible pointer type 'const char **' [-Wincompatible-pointer-types]
  124 |  /* const */ &rl_terminal_name,
      |              ^
org_gnu_readline_Readline.c:124:14: note: (near initialization for 'globalStringInternals[4]')
org_gnu_readline_Readline.c:126:14: error: initialization of 'char **' from incompatible pointer type 'const char **' [-Wincompatible-pointer-types]
  126 |  /* const */ &rl_basic_word_break_characters,
      |              ^
org_gnu_readline_Readline.c:126:14: note: (near initialization for 'globalStringInternals[6]')
org_gnu_readline_Readline.c:127:14: error: initialization of 'char **' from incompatible pointer type 'const char **' [-Wincompatible-pointer-types]
  127 |  /* const */ &rl_completer_word_break_characters,
      |              ^
org_gnu_readline_Readline.c:127:14: note: (near initialization for 'globalStringInternals[7]')
org_gnu_readline_Readline.c:128:14: error: initialization of 'char **' from incompatible pointer type 'const char **' [-Wincompatible-pointer-types]
  128 |  /* const */ &rl_completer_quote_characters,
      |              ^
org_gnu_readline_Readline.c:128:14: note: (near initialization for 'globalStringInternals[8]')
org_gnu_readline_Readline.c:129:14: error: initialization of 'char **' from incompatible pointer type 'const char **' [-Wincompatible-pointer-types]
  129 |  /* const */ &rl_basic_quote_characters,
      |              ^
org_gnu_readline_Readline.c:129:14: note: (near initialization for 'globalStringInternals[9]')
org_gnu_readline_Readline.c:130:14: error: initialization of 'char **' from incompatible pointer type 'const char **' [-Wincompatible-pointer-types]
  130 |  /* const */ &rl_filename_quote_characters,
      |              ^
org_gnu_readline_Readline.c:130:14: note: (near initialization for 'globalStringInternals[10]')
org_gnu_readline_Readline.c:131:14: error: initialization of 'char **' from incompatible pointer type 'const char **' [-Wincompatible-pointer-types]
  131 |  /* const */ &rl_special_prefixes,
      |              ^
org_gnu_readline_Readline.c:131:14: note: (near initialization for 'globalStringInternals[11]')

ebourg avatar Dec 11 '24 08:12 ebourg

Thanks @ebourg. I have handled all of these apart from:

org_gnu_readline_Readline.c:98:3: error: initialization of ‘int *’ from incompatible pointer type ‘long unsigned int *’ [-Wincompatible-pointer-types]
   98 |   &rl_readline_state,
      |   ^
org_gnu_readline_Readline.c:98:3: note: (near initialization for ‘globalIntegerInternals[2]’)

this is from an ABI change introduced in readline 7.0 where rl_readline_state changed from int to long unsigned int.

I raised an issue to track that (#45), and I need to think about how I best want to do it. I guess it will also be a breaking change for anything using java-readline if I bubble up the type change to java-readline's interface too.

aclemons avatar Dec 12 '24 21:12 aclemons

These should all be resolved now on master. I will cut a release soon

aclemons avatar Jun 29 '25 01:06 aclemons