Blame maint/structalign.c

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
}