mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@libc.org>
To: musl@lists.openwall.com
Subject: Revisiting max_align_t and stdalign.h
Date: Sun, 8 Jun 2014 10:59:24 -0400	[thread overview]
Message-ID: <20140608145924.GA19121@brightrain.aerifal.cx> (raw)

I was looking back at the max_align_t issue and there seems to be a
lot more to resolve: gcc is badly broken in regards to everything
related to stdalign.h. This test program on i386:

#include <stdalign.h>
#include <stdio.h>

int main()
{
	long long x;
	printf("%d %d\n", (int)_Alignof(x), (int)_Alignof(long long));
}

prints 8 8 on most gcc versions, and what's worse, its behavior
depends on -std; adding -std=c11 and using gcc 4.9.0 changes it to
printing 8 4. The correct result of course would be 4 4.

I had in mind the following patch for stdalign.h:

diff --git a/include/stdalign.h b/include/stdalign.h
index b6e50ae..3f00466 100644
--- a/include/stdalign.h
+++ b/include/stdalign.h
@@ -4,7 +4,7 @@
 /* this whole header only works in C11 or with compiler extensions */
 #if __STDC_VERSION__ < 201112L && defined( __GNUC__)
 #define _Alignas(t) __attribute__((__aligned__(t)))
-#define _Alignof(t) __alignof__(t)
+#define _Alignof(t) (sizeof(struct {char __x; __typeof__(t) __y;}) - sizeof(t))
 #endif
 
 #define alignas _Alignas

but it doesn't really help since _Alignof is broken even with
-std=c11.

I suspect _Alignas is similarly broken.

The only "solution" I see is adopting stdc-predef.h and putting
#defines for _Alignof and _Alignas in there for all __GNUC__ compilers
earlier than the first version of gcc that gets fixed. I've wanted to
add stdc-predef.h for a while anyway to define things like
__STDC_ISO_10646__ but since it's only auto-included for gcc 4.8 and
later, we should either patch earlier gcc's to add it or just throw
"-include stdc-predef.h" into the specfile (of course this is outside
the scope of musl itself).

Rich


             reply	other threads:[~2014-06-08 14:59 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-08 14:59 Rich Felker [this message]
2014-06-08 15:54 ` Rich Felker
2014-06-08 16:19   ` Rich Felker

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=20140608145924.GA19121@brightrain.aerifal.cx \
    --to=dalias@libc.org \
    --cc=musl@lists.openwall.com \
    /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).