From: Rich Felker <dalias@libc.org>
To: Per Johansson <per@morth.org>
Cc: musl@lists.openwall.com
Subject: Re: syslog.h prioritynames define not compatible with -Wwrite-strings
Date: Tue, 30 Aug 2016 17:20:02 -0400 [thread overview]
Message-ID: <20160830212002.GM15995@brightrain.aerifal.cx> (raw)
In-Reply-To: <CAOj2s=QtQW_BO3EF-cnYVXNMvXLDQ6zQ=iU_+dO9wr0Yu7QF1Q@mail.gmail.com>
On Thu, Aug 25, 2016 at 09:47:06AM +0200, Per Johansson wrote:
> Hello,
>
> I'm trying to port a code base to musl. I've run into an issue with
> prioritynames as defined by syslog.h:
>
> CODE *pri_code = prioritynames;
>
> produces
>
> error: initialization discards 'const' qualifier from pointer target
> type [-Werror=discarded-qualifiers]
>
> This is repeated once per element in the array.
>
> While the error message points to -Wdiscarded-qualifiers I believe
> this is actually due to us using -Wwrite-strings which turns string
> literals into type const char* instead of char*.
This is a nasty problem with how -Wwrite-strings is implemented. It
does not act as a warning option but fundamentally changes the
languages semantics in a way that is not C. I have an open bug report
against gcc for this:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61579
> I suppose the most compatible solution would be to cast each string
> literal to char* in the define. It's either that or use const char* in
> the struct, but that's likely to cause issues in other programs.
> Or use some trickery to disable the warning I suppose, wouldn't know about that.
>
> Please CC me on any reply as I'm currently not subscribed.
>
> Minimal code to reproduce:
>
> #define SYSLOG_NAMES
> #include <syslog.h>
> CODE *c = prioritynames;
>
> Compiles without warning:
> gcc -nostdinc -isystem include -isystem obj/include -c test.c
>
> Adding -Wwrite-strings give warnings:
> gcc -Wwrite-strings -nostdinc -isystem include -isystem obj/include -c test.c
Based on the above, I don't consider this a bug in musl but a bug in
gcc's -Wwrite-strings. However, there are a lot of other problems
created by the current implementation of the SYSLOG_NAMES stuff, and
it needs to be redone entirely, probably more closely matching how
legacy implementations did it (the SYSLOG_NAMES stuff is all legacy
cruft anyway and shouldn't be used in modern code).
Rich
prev parent reply other threads:[~2016-08-30 21:20 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-25 7:47 Per Johansson
2016-08-30 21:20 ` Rich Felker [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160830212002.GM15995@brightrain.aerifal.cx \
--to=dalias@libc.org \
--cc=musl@lists.openwall.com \
--cc=per@morth.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).