Hi Rene,

On 2026-03-29T17:36:52+0200, Rene Kita wrote:
> On Sun, Mar 29, 2026 at 12:07:31PM +0200, Rene Kita wrote:
> > I had some time and wanted to see how mutt compiles with more warnings
> > enabled, i.e. CFLAGS='-Wall -Wcast-qual -Werror
> > -Wimplicit-function-declaration -Wimplicit-int -Wnull-dereference
> > -Wold-style-definition -Wredundant-decls -Wstrict-prototypes
> > -Wstring-compare -Wtype-limits -Wuninitialized -Wunused'
> > 
> > Turns out there's a lot the compiler complains about, especially when it
> > comes to some const usage. The following patches are a result of this
> > experiment and are far from a complete fix.
> > 
> > This series depends on the proposed reformatting from Kevin. It's
> > untested besides compilation and CI.
> 
> Below is the shortened build log with the remaining errors after my 9
> patches were applied. Adding more const to avoid these errors leads to
> more errors somewhere else in the call chain. There are other errors
> which come from -Wtype-limits and -Wredundant-decls.
> 
> Most prominent example is imap_next_word which is called in a lot of
> functions taking const char * as an parameter. We do cast away the const
> there. imap_next_word does not modify the string, but will return the
> string in the end. This means if we let imap_next_word take a const
> char * we also need to return a const char *. But this does not work
> everywhere it is used.
> 
> What is the general opinion here regarding such compiler flags and how
> to handle such situations?
> 
> For me -Wcast-qual is one of the most important flags. I prefer to use
> less const if needed to make the build pass without warnings.
> Suppressing warnings should only be used when interacting with
> interfaces not under our control.

+1.

I love this patch set.


Have a lovely day!
Alex

> 
> --
> 
> [...]
> command.c: In function ‘imap_cmd_trailer’:
> command.c:224:22: warning: cast discards ‘const’ qualifier from pointer 
> target type [-Wcast-qual]
>   224 |   s = imap_next_word((char *)s);
>       |                      ^
> command.c:233:22: warning: cast discards ‘const’ qualifier from pointer 
> target type [-Wcast-qual]
>   233 |   s = imap_next_word((char *)s);
>       |                      ^
> command.c: In function ‘cmd_status’:
> command.c:465:22: warning: cast discards ‘const’ qualifier from pointer 
> target type [-Wcast-qual]
>   465 |   s = imap_next_word((char*)s);
>       |                      ^
> command.c: In function ‘cmd_parse_myrights’:
> command.c:1038:22: warning: cast discards ‘const’ qualifier from pointer 
> target type [-Wcast-qual]
>  1038 |   s = imap_next_word((char*)s);
>       |                      ^
> command.c:1039:22: warning: cast discards ‘const’ qualifier from pointer 
> target type [-Wcast-qual]
>  1039 |   s = imap_next_word((char*)s);
>       |                      ^
> command.c: In function ‘cmd_parse_search’:
> command.c:1106:30: warning: cast discards ‘const’ qualifier from pointer 
> target type [-Wcast-qual]
>  1106 |   while ((s = imap_next_word((char*)s)) && *s != '\0')
>       |                              ^
> command.c: In function ‘cmd_parse_enabled’:
> command.c:1293:30: warning: cast discards ‘const’ qualifier from pointer 
> target type [-Wcast-qual]
>  1293 |   while ((s = imap_next_word((char*)s)) && *s != '\0')
>       |                              ^
> [...]
> mutt_socket.c: In function ‘mutt_conn_find’:
> mutt_socket.c:311:22: warning: cast discards ‘const’ qualifier from pointer 
> target type [-Wcast-qual]
>   311 |   mutt_account_tourl((ACCOUNT*) account, &url, 0);
>       |                      ^
> mutt_zstrm.c: In function ‘mutt_zstrm_write’:
> mutt_zstrm.c:190:27: warning: cast discards ‘const’ qualifier from pointer 
> target type [-Wcast-qual]
>   190 |   zctx->write.z.next_in = (Bytef*) buf;
>       |                           ^
> [...]
> pgppubring.c: In function ‘main’:
> pgppubring.c:159:34: warning: cast discards ‘const’ qualifier from pointer 
> target type [-Wcast-qual]
>   159 |   pgpring_find_candidates(kring, (const char**) argv + optind, argc - 
> optind);
>       |                                  ^
> [...]
> date.c: In function ‘mutt_mktime’:
> date.c:88:20: warning: comparison is always false due to limited range of 
> data type [-Wtype-limits]
>    88 |   if ((time_t)year > TM_YEAR_MAX)
>       |                    ^
> [...]
> sendlib.c:73:15: warning: redundant redeclaration of ‘environ’ 
> [-Wredundant-decls]
>    73 | extern char **environ;
>       |               ^~~~~~~
> In file included from mutt.h:25,
>                  from sendlib.c:26:
> /usr/include/unistd.h:566:15: note: previous declaration of ‘environ’ with 
> type ‘char **’
>   566 | extern char **environ;
>       |               ^~~~~~~
> sendlib.c: In function ‘convert_file_from_to’:
> sendlib.c:864:50: warning: to be safe all intermediate pointers in cast from 
> ‘char **’ to ‘const char **’ must be ‘const’ qualified [-Wcast-qual]
>   864 |       ret = convert_file_to(file, fcode, ncodes, (const char **)tcode,
>       |                                                  ^
> sendlib.c:879:52: warning: to be safe all intermediate pointers in cast from 
> ‘char **’ to ‘const char **’ must be ‘const’ qualified [-Wcast-qual]
>   879 |     ret = convert_file_to(file, fromcodes, ncodes, (const char 
> **)tcode,
>       |                                                    ^

-- 
<https://www.alejandro-colomar.es>

Attachment: signature.asc
Description: PGP signature

Reply via email to