From 8bacb3d9672f52aff9464d9d534c30818e3da8fc Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 23 Feb 2000 18:14:28 +0000 Subject: [PATCH] * execute/20000223-1.c: New test. From-SVN: r32117 --- gcc/testsuite/gcc.c-torture/ChangeLog | 4 ++ .../gcc.c-torture/execute/20000223-1.c | 61 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/execute/20000223-1.c diff --git a/gcc/testsuite/gcc.c-torture/ChangeLog b/gcc/testsuite/gcc.c-torture/ChangeLog index 86fac2e2a95..1c0a9d70992 100644 --- a/gcc/testsuite/gcc.c-torture/ChangeLog +++ b/gcc/testsuite/gcc.c-torture/ChangeLog @@ -1,3 +1,7 @@ +2000-02-23 Nathan Sidwell + + * execute/20000223-1.c: New test. + 2000-01-27 Jakub Jelinek * compile/20000127-1.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/execute/20000223-1.c b/gcc/testsuite/gcc.c-torture/execute/20000223-1.c new file mode 100644 index 00000000000..db6180b757a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20000223-1.c @@ -0,0 +1,61 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + Contributed by Nathan Sidwell 23 Feb 2000 */ + +/* __alignof__ should never return a non-power of 2 + eg, sizeof(long double) might be 12, but that means it must be alignable + on a 4 byte boundary. */ + +void check (char const *type, int align) +{ + if ((align & -align) != align) + { + abort (); + } +} + +#define QUOTE_(s) #s +#define QUOTE(s) QUOTE_(s) + +#define check(t) check(QUOTE(t), __alignof__(t)) + +// This struct should have an alignment of the lcm of all the types. If one of +// the base alignments is not a power of two, then A cannot be power of two +// aligned. +struct A +{ + char c; + signed short ss; + unsigned short us; + signed int si; + unsigned int ui; + signed long sl; + unsigned long ul; + signed long long sll; + unsigned long long ull; + float f; + double d; + long double ld; + void *dp; + void (*fp)(); +}; + +int main () +{ + check (void); + check (char); + check (signed short); + check (unsigned short); + check (signed int); + check (unsigned int); + check (signed long); + check (unsigned long); + check (signed long long); + check (unsigned long long); + check (float); + check (double); + check (long double); + check (void *); + check (void (*)()); + check (struct A); + return 0; +} -- 2.30.2