#include <stdio.h>
#define DBG(a,b,c)
int main(int argc, char *argv[])
{
FILE *cf;
int is_packed = 1;
int is_two = 1;
int is_four = 1;
int is_eight = 1;
int is_sixteen = 1;
struct {
char a;
float b;
} char_float;
struct {
float b;
char a;
} float_char;
struct {
char a;
double b;
} char_double;
struct {
double b;
char a;
} double_char;
#ifdef HAVE_LONG_DOUBLE
struct {
char a;
long double b;
} char_long_double;
struct {
long double b;
char a;
} long_double_char;
struct {
long double a;
int b;
char c;
} long_double_int_char;
#endif
int size, extent1, extent2;
size = sizeof(char) + sizeof(float);
extent1 = sizeof(char_float);
extent2 = sizeof(float_char);
if (size != extent1)
is_packed = 0;
if ((extent1 % 2) != 0 && (extent2 % 2) != 0)
is_two = 0;
if ((extent1 % 4) != 0 && (extent2 % 4) != 0)
is_four = 0;
if (sizeof(float) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
is_eight = 0;
DBG("char_float", size, extent1);
size = sizeof(char) + sizeof(double);
extent1 = sizeof(char_double);
extent2 = sizeof(double_char);
if (size != extent1)
is_packed = 0;
if ((extent1 % 2) != 0 && (extent2 % 2) != 0)
is_two = 0;
if ((extent1 % 4) != 0 && (extent2 % 4) != 0)
is_four = 0;
if (sizeof(double) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
is_eight = 0;
DBG("char_double", size, extent1);
#ifdef HAVE_LONG_DOUBLE
size = sizeof(char) + sizeof(long double);
extent1 = sizeof(char_long_double);
extent2 = sizeof(long_double_char);
if (size != extent1)
is_packed = 0;
if ((extent1 % 2) != 0 && (extent2 % 2) != 0)
is_two = 0;
if ((extent1 % 4) != 0 && (extent2 % 4) != 0)
is_four = 0;
if (sizeof(long double) >= 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0)
is_eight = 0;
if (sizeof(long double) > 8 && (extent1 % 16) != 0 && (extent2 % 16) != 0)
is_sixteen = 0;
DBG("char_long-double", size, extent1);
extent1 = sizeof(long_double_int_char);
if ((extent1 % 2) != 0)
is_two = 0;
if ((extent1 % 4) != 0)
is_four = 0;
if (sizeof(long double) >= 8 && (extent1 % 8) != 0)
is_eight = 0;
if (sizeof(long double) > 8 && (extent1 % 16) != 0)
is_sixteen = 0;
#else
is_sixteen = 0;
#endif
if (is_sixteen) {
is_eight = 0;
is_four = 0;
is_two = 0;
}
if (is_eight) {
is_four = 0;
is_two = 0;
}
if (is_four)
is_two = 0;
/* Tabulate the results */
cf = fopen("ctest.out", "w");
if (is_packed + is_two + is_four + is_eight + is_sixteen == 0) {
fprintf(cf, "Could not determine alignment\n");
} else {
if (is_packed + is_two + is_four + is_eight + is_sixteen != 1) {
fprintf(cf, "error!\n");
} else {
if (is_packed)
fprintf(cf, "packed\n");
if (is_two)
fprintf(cf, "two\n");
if (is_four)
fprintf(cf, "four\n");
if (is_eight)
fprintf(cf, "eight\n");
if (is_sixteen)
fprintf(cf, "sixteen\n");
}
}
fclose(cf);
return 0;
}