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