mirror of
https://github.com/nArnoSNES/tcc-65816.git
synced 2024-06-02 19:42:59 +00:00
62 lines
1.3 KiB
C
62 lines
1.3 KiB
C
/* Copyright (C) 2000 Free Software Foundation, Inc.
|
|
Contributed by Nathan Sidwell 23 Feb 2000 <nathan@codesourcery.com> */
|
|
|
|
/* __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;
|
|
}
|