mailing list of musl libc
 help / color / mirror / code / Atom feed
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


      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).