summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-06-21 07:44:46 -0400
committerRich Felker <dalias@aerifal.cx>2014-07-28 00:27:58 -0400
commit37eb19e0908697e8ef810cf350a52d2009959f1a (patch)
tree6de80c0952f7e4caf68dc15494364b9de5bdec7a
parentc65dbec736419d706a2d3a0070ab3bedb0151f4a (diff)
downloadmusl-37eb19e0908697e8ef810cf350a52d2009959f1a.tar.gz
remove hack in syslog.h that resulted in aliasing violations
this issue affected the prioritynames and facilitynames arrays which are only provided when requested (usually by syslogd implementations) and which are presently defined as compound literals. the aliasing violation seems to have been introduced as a workaround for bad behavior by gcc's -Wwrite-strings option, but it caused compilers to completely optimize out the contents of prioritynames and facilitynames since, under many usage cases, the aliasing rules prove that the contents are never accessed. (cherry picked from commit 70d9c303b3115ab0fe6060ba0f7b0e4c0a2320b7)
-rw-r--r--include/syslog.h8
1 files changed, 2 insertions, 6 deletions
diff --git a/include/syslog.h b/include/syslog.h
index 71dbd99b..5b4d2964 100644
--- a/include/syslog.h
+++ b/include/syslog.h
@@ -69,21 +69,17 @@ void vsyslog (int, const char *, va_list);
#if defined(SYSLOG_NAMES)
#define INTERNAL_NOPRI 0x10
#define INTERNAL_MARK (LOG_NFACILITIES<<3)
-struct __CODE {
- const char *c_name;
- int c_val;
-};
typedef struct {
char *c_name;
int c_val;
} CODE;
-#define prioritynames ((CODE *)(const struct __CODE []){ \
+#define prioritynames ((CODE *)(const CODE []){ \
{ "alert", LOG_ALERT }, { "crit", LOG_CRIT }, { "debug", LOG_DEBUG }, \
{ "emerg", LOG_EMERG }, { "err", LOG_ERR }, { "error", LOG_ERR }, \
{ "info", LOG_INFO }, { "none", INTERNAL_NOPRI }, \
{ "notice", LOG_NOTICE }, { "panic", LOG_EMERG }, \
{ "warn", LOG_WARNING }, { "warning", LOG_WARNING }, { 0, -1 } })
-#define facilitynames ((CODE *)(const struct __CODE []){ \
+#define facilitynames ((CODE *)(const CODE []){ \
{ "auth", LOG_AUTH }, { "authpriv", LOG_AUTHPRIV }, \
{ "cron", LOG_CRON }, { "daemon", LOG_DAEMON }, { "ftp", LOG_FTP }, \
{ "kern", LOG_KERN }, { "lpr", LOG_LPR }, { "mail", LOG_MAIL }, \