Skip to content

Wrong alignment of struct #1034

Closed
Closed
@fitzgen

Description

@fitzgen

Input C/C++ Header

Generated by C-Smith:

/*
 * This is a RANDOMLY GENERATED PROGRAM.
 *
 * Generator: csmith 2.2.0
 * Git version: dcef523
 * Options:   --no-checksum --nomain --max-block-size 1 --max-block-depth 1 -o /tmp/input-d4ucc247.h
 * Seed:      629758572
 */

#include "csmith.h"

volatile uint64_t csmith_sink_ = 0;

static long __undefined;

/* --- Struct/Union Declarations --- */
struct S0 {
   uint64_t  f0;
   int64_t  f1;
   const int32_t  f2;
   uint8_t  f3;
   const uint8_t  f4;
   const int32_t  f5;
   uint8_t  f6;
};

#pragma pack(push)
#pragma pack(1)
struct S2 {
   signed f0 : 18;
   unsigned f1 : 11;
};
#pragma pack(pop)

union U4 {
   volatile unsigned f0 : 31;
   int64_t  f1;
   int64_t  f2;
   uint64_t  f3;
   uint32_t  f4;
};

/* --- GLOBAL VARIABLES --- */
static int8_t g_6 = 0xD9L;
static int8_t *g_5 = &g_6;
static int8_t *g_16 = &g_6;
static int8_t **g_15 = &g_16;
static volatile struct S2 g_19 = {492,24};/* VOLATILE GLOBAL g_19 */
static int32_t g_39 = 8L;
static struct S2 g_46 = {-28,33};
static const int32_t g_54 = 0x708CDB5CL;
static const int32_t *g_53[3] = {&g_54,&g_54,&g_54};
static int32_t g_57 = (-1L);
static int16_t g_58 = 0L;
static int32_t g_61 = (-1L);
static int64_t g_62 = (-1L);
static uint8_t g_63 = 255UL;
static int32_t *g_78 = &g_39;
static int32_t **g_77 = &g_78;
static int8_t g_106 = 5L;
static int64_t g_113 = 1L;
static int64_t *g_112 = &g_113;
static const int8_t g_124 = (-9L);
static int64_t g_131 = (-1L);
static volatile int8_t g_132[6][9][4] = {{{0x38L,0x7DL,0xCDL,0x38L},{(-9L),(-1L),0x7CL,0x72L},{(-10L),0x38L,7L,0L},{0xB3L,0x72L,0xB3L,(-1L)},{0x75L,(-9L),(-9L),0x72L},{0x43L,5L,0x38L,(-9L)},{0xCDL,0x7DL,0x38L,0xB3L},{0x43L,0x75L,(-9L),(-1L)},{0x75L,0x3EL,0xB3L,(-10L)}},{{0xB3L,(-10L),7L,5L},{(-10L),0x75L,0x7CL,5L},{0xCDL,0x25L,0x25L,0xCDL},{0x96L,0x38L,0xC6L,(-1L)},{(-1L),0xCDL,0x43L,0x3EL},{5L,0L,0x49L,0x3EL},{0x7CL,0xCDL,5L,(-1L)},{0xB3L,0x38L,0x7DL,0xCDL},{(-1L),0x25L,0x96L,5L}},{{0xC6L,7L,5L,3L},{0x24L,(-1L),(-1L),(-1L)},{5L,5L,0x7CL,0x38L},{5L,7L,0xC6L,0x49L},{0xCDL,(-1L),0L,0xCDL},{0xCDL,3L,0xC6L,8L},{5L,0xCDL,0x7CL,(-9L)},{5L,0x51L,(-1L),0x3EL},{0x24L,0x96L,5L,8L}},{{0xC6L,0x38L,0x96L,0x96L},{(-1L),(-1L),0x7DL,5L},{0xB3L,0L,5L,0x38L},{0x7CL,(-1L),0x49L,5L},{5L,(-1L),0x43L,0x38L},{(-1L),0L,0xC6L,5L},{0x96L,(-1L),0x25L,0x96L},{0xCDL,0x38L,5L,8L},{(-1L),0x96L,0x7CL,0x3EL}},{{0x49L,0x51L,0x49L,(-9L)},{0x24L,0xCDL,0x72L,8L},{0xB3L,3L,0x96L,0xCDL},{0x25L,(-1L),0x96L,0x49L},{0xB3L,7L,0x72L,0x38L},{0x24L,5L,0x49L,(-1L)},{0x49L,(-1L),0x7CL,3L},{(-1L),7L,5L,5L},{0xCDL,0x25L,0x25L,0xCDL}},{{0x96L,0x38L,0xC6L,(-1L)},{(-1L),0xCDL,0x43L,0x3EL},{5L,0L,0x49L,0x3EL},{0x7CL,0xCDL,5L,(-1L)},{0xB3L,0x38L,0x7DL,0xCDL},{(-1L),0x25L,0x96L,5L},{0xC6L,7L,5L,3L},{0x24L,(-1L),(-1L),(-1L)},{5L,5L,0x7CL,0x38L}}};
static volatile uint16_t g_139 = 65535UL;/* VOLATILE GLOBAL g_139 */
static int8_t *** volatile g_148 = &g_15;/* VOLATILE GLOBAL g_148 */
static union U4 g_149 = {0UL};/* VOLATILE GLOBAL g_149 */


/* --- FORWARD DECLARATIONS --- */
static union U4  func_1(void);
static int8_t ** const  func_2(int8_t * p_3, int8_t ** p_4);
static int8_t ** func_9(int32_t  p_10, int8_t ** p_11, int32_t  p_12, int8_t  p_13, const uint64_t  p_14);
static uint8_t  func_25(uint64_t  p_26, int32_t  p_27, int32_t  p_28);
static int8_t ** const  func_30(int8_t * p_31, int32_t  p_32, int8_t * p_33, int8_t * p_34);
static int8_t * func_35(uint32_t  p_36);
static uint32_t  func_40(uint16_t  p_41, struct S2  p_42, int64_t  p_43, int8_t ** p_44);
static int8_t ** func_47(int8_t  p_48, int8_t  p_49, int8_t * p_50, int8_t * p_51);
static uint32_t  func_68(int8_t ** p_69, int16_t  p_70, int8_t * p_71, uint8_t  p_72, int64_t  p_73);
static int8_t ** func_74(int32_t ** p_75, int64_t  p_76);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_5 g_6 g_15 g_19 g_16 g_46 g_53 g_63 g_77 g_78 g_39 g_54 g_62 g_57 g_106 g_112 g_139 g_148 g_149
 * writes: g_5 g_39 g_53 g_63 g_57 g_78 g_106 g_62 g_139 g_15
 */
static union U4  func_1(void)
{ /* block id: 0 */
    int8_t *l_20[4] = {(void*)0,(void*)0,(void*)0,(void*)0};
    int32_t l_29[4][7] = {{0L,(-3L),(-5L),(-3L),0L,0x6930509BL,0x6930509BL},{0L,(-3L),(-5L),(-3L),0L,0x6930509BL,0x6930509BL},{0x6930509BL,0x0F30385DL,0L,0x0F30385DL,0x6930509BL,(-5L),(-5L)},{0x6930509BL,0x0F30385DL,0L,0x0F30385DL,0x6930509BL,(-5L),(-5L)}};
    const int8_t *l_123[3];
    const int8_t **l_122 = &l_123[2];
    int8_t ***l_147 = &g_15;
    int i, j;
    for (i = 0; i < 3; i++)
        l_123[i] = &g_124;
    (*g_148) = func_2((g_5 = g_5), (((((safe_div_func_uint32_t_u_u((((*l_147) = func_9(g_6, g_15, ((safe_lshift_func_uint16_t_u_u(0x711DL, 6)) != (1UL && ((g_19 , l_20[1]) != ((*l_122) = ((safe_mod_func_uint8_t_u_u((safe_rshift_func_int8_t_s_u((*g_16), func_25(l_29[0][6], g_6, g_6))), 2UL)) , (*g_15)))))), l_29[3][6], g_46.f1)) != &l_20[2]), l_29[0][6])) >= l_29[3][4]) , (*l_122)) == (void*)0) , (*l_147)));
    return g_149;
}


/* ------------------------------------------ */
/* 
 * reads : g_77
 * writes: g_78
 */
static int8_t ** const  func_2(int8_t * p_3, int8_t ** p_4)
{ /* block id: 46 */
    (*g_77) = (void*)0;
    return &g_16;
}


/* ------------------------------------------ */
/* 
 * reads : g_139
 * writes: g_139
 */
static int8_t ** func_9(int32_t  p_10, int8_t ** p_11, int32_t  p_12, int8_t  p_13, const uint64_t  p_14)
{ /* block id: 38 */
    const int32_t l_125 = 9L;
    int32_t l_128 = 0L;
    int32_t l_129 = 0x99A09347L;
    int32_t l_133 = 0x8B77237EL;
    int32_t l_134 = 0xC1B3EE27L;
    int32_t l_135 = 0x6E12AA01L;
    int32_t l_136 = (-7L);
    int32_t l_137 = 0L;
    int32_t l_138 = 0x6387BD1CL;
    if (l_125)
    { /* block id: 39 */
        int32_t *l_126 = &g_57;
        int32_t *l_127[8][9][3];
        int16_t l_130 = (-1L);
        int i, j, k;
        for (i = 0; i < 8; i++)
        {
            for (j = 0; j < 9; j++)
            {
                for (k = 0; k < 3; k++)
                    l_127[i][j][k] = (void*)0;
            }
        }
        ++g_139;
    }
    else
    { /* block id: 41 */
        int32_t *l_142 = &l_137;
        int32_t *l_143[10] = {&l_138,&l_138,&l_138,&l_138,&l_138,&l_138,&l_138,&l_138,&l_138,&l_138};
        uint16_t l_144[10] = {0x1A07L,1UL,0x1A07L,1UL,0x1A07L,1UL,0x1A07L,1UL,0x1A07L,1UL};
        int i;
        l_144[4]++;
    }
    return &g_16;
}


/* ------------------------------------------ */
/* 
 * reads : g_15 g_16 g_6 g_46 g_53 g_63 g_77 g_78 g_39 g_54 g_62 g_57 g_106 g_112
 * writes: g_39 g_53 g_63 g_57 g_78 g_106 g_62
 */
static uint8_t  func_25(uint64_t  p_26, int32_t  p_27, int32_t  p_28)
{ /* block id: 2 */
    uint32_t l_37 = 18446744073709551615UL;
    int16_t l_45 = 0x72BEL;
    int8_t *l_52[4][6][4] = {{{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6}},{{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6}},{{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6}},{{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6},{&g_6,&g_6,&g_6,&g_6}}};
    int32_t *l_66 = &g_57;
    int8_t **l_120 = &g_16;
    int8_t ***l_119[5] = {&g_15,&g_15,&g_15,&g_15,&g_15};
    int8_t ***l_121 = &l_120;
    int i, j, k;
    (*l_121) = func_30(func_35(l_37), ((*l_66) = (g_6 >= func_40(l_45, g_46, g_46.f1, func_47(l_45, (**g_15), l_52[0][0][3], (*g_15))))), l_52[0][0][3], (*g_15));
    return g_106;
}


/* ------------------------------------------ */
/* 
 * reads : g_77 g_78 g_39 g_54 g_46.f0 g_63 g_62 g_57 g_16 g_6 g_106 g_112 g_46
 * writes: g_78 g_63 g_106 g_62
 */
static int8_t ** const  func_30(int8_t * p_31, int32_t  p_32, int8_t * p_33, int8_t * p_34)
{ /* block id: 13 */
    uint32_t l_79[1][2][4] = {{{0xAC7196A4L,0x8F974433L,0xAC7196A4L,0xAC7196A4L},{0x8F974433L,0x8F974433L,18446744073709551615UL,0x8F974433L}}};
    int8_t *l_80 = &g_6;
    int64_t **l_114[9] = {(void*)0,&g_112,&g_112,(void*)0,&g_112,&g_112,(void*)0,&g_112,&g_112};
    int64_t *l_115 = &g_113;
    int i, j, k;
    if (func_40(((((!func_68(func_74(g_77, p_32), l_79[0][1][1], l_80, g_39, l_79[0][1][2])) > ((l_115 = g_112) != &g_113)) >= l_79[0][1][1]) , g_63), g_46, l_79[0][1][1], &l_80))
    { /* block id: 29 */
        int32_t * const l_116 = &g_39;
        int32_t **l_117 = &g_78;
        (*l_117) = l_116;
    }
    else
    { /* block id: 31 */
        int8_t ** const l_118 = &l_80;
        return &g_16;
    }
    return &g_16;
}


/* ------------------------------------------ */
/* 
 * reads : g_15 g_16
 * writes: g_39
 */
static int8_t * func_35(uint32_t  p_36)
{ /* block id: 3 */
    int32_t *l_38 = &g_39;
    (*l_38) = p_36;
    return (*g_15);
}


/* ------------------------------------------ */
/* 
 * reads : g_63
 * writes: g_63
 */
static uint32_t  func_40(uint16_t  p_41, struct S2  p_42, int64_t  p_43, int8_t ** p_44)
{ /* block id: 9 */
    int32_t *l_56[2];
    int32_t l_59[7][9] = {{0xD7B1ECBCL,0x2D8C20E5L,6L,0x624E194EL,6L,0x2D8C20E5L,0xD7B1ECBCL,(-1L),0xF9094207L},{(-1L),5L,0xD7B1ECBCL,0x624E194EL,0L,0x2E4BCB81L,(-1L),6L,(-1L)},{(-1L),0L,0x7A880E1BL,0x7A880E1BL,0L,(-1L),0xF9094207L,(-1L),0xD7B1ECBCL},{6L,1L,0x7A880E1BL,0x2E4BCB81L,(-1L),0x61EA52FAL,0L,0L,0x61EA52FAL},{0x7A880E1BL,0L,0x624E194EL,6L,0x2D8C20E5L,0xD7B1ECBCL,(-1L),0xF9094207L,(-1L)},{0x61EA52FAL,6L,0xD7B1ECBCL,(-1L),7L,0x287676E3L,0L,0x287676E3L,7L},{(-1L),7L,7L,(-1L),5L,0xD7B1ECBCL,0x624E194EL,0L,0x2E4BCB81L}};
    int16_t l_60 = 0x09D5L;
    int i, j;
    for (i = 0; i < 2; i++)
        l_56[i] = &g_57;
    g_63++;
    return p_42.f0;
}


/* ------------------------------------------ */
/* 
 * reads : g_53
 * writes: g_53
 */
static int8_t ** func_47(int8_t  p_48, int8_t  p_49, int8_t * p_50, int8_t * p_51)
{ /* block id: 6 */
    const int32_t **l_55 = &g_53[0];
    (*l_55) = g_53[0];
    return &g_16;
}


/* ------------------------------------------ */
/* 
 * reads : g_54 g_46.f0 g_63 g_62 g_57 g_16 g_6 g_106 g_77
 * writes: g_63 g_106 g_62 g_78
 */
static uint32_t  func_68(int8_t ** p_69, int16_t  p_70, int8_t * p_71, uint8_t  p_72, int64_t  p_73)
{ /* block id: 17 */
    uint64_t l_81[1];
    int32_t l_93 = (-1L);
    uint8_t *l_94 = &g_63;
    const struct S0 l_103 = {0UL,0x133A9B92FD598C55LL,0xA0DA2B3CL,0x8CL,1UL,5L,0UL};
    const uint32_t l_104[8][6] = {{0x3E519B98L,0UL,0UL,0x3E519B98L,18446744073709551615UL,18446744073709551615UL},{0x3E519B98L,18446744073709551615UL,18446744073709551615UL,0x706978B3L,0UL,18446744073709551615UL},{18446744073709551606UL,0xDF25B48FL,0UL,9UL,0UL,0xDF25B48FL},{0x706978B3L,18446744073709551615UL,0x09415F90L,9UL,18446744073709551615UL,0UL},{18446744073709551606UL,0UL,0x09415F90L,0x706978B3L,0xDF25B48FL,0xDF25B48FL},{0x3E519B98L,0UL,0UL,0x3E519B98L,18446744073709551615UL,18446744073709551615UL},{0x3E519B98L,18446744073709551615UL,18446744073709551615UL,0x706978B3L,0UL,18446744073709551615UL},{18446744073709551606UL,0xDF25B48FL,0UL,9UL,0UL,0xDF25B48FL}};
    int8_t *l_105[8][2] = {{(void*)0,&g_106},{(void*)0,(void*)0},{(void*)0,&g_106},{(void*)0,(void*)0},{(void*)0,&g_106},{(void*)0,(void*)0},{(void*)0,&g_106},{(void*)0,(void*)0}};
    int64_t *l_107 = (void*)0;
    int64_t *l_108 = (void*)0;
    int64_t *l_109 = &g_62;
    int i, j;
    for (i = 0; i < 1; i++)
        l_81[i] = 0UL;
    if ((l_81[0] > (safe_lshift_func_int16_t_s_u((p_70 |= (g_54 && l_81[0])), (safe_mul_func_int16_t_s_s(((((*l_109) = (safe_mul_func_int8_t_s_s((g_46.f0 > (+p_72)), (g_106 &= ((safe_sub_func_int64_t_s_s((safe_mod_func_int64_t_s_s(((--(*l_94)) || (safe_unary_minus_func_uint64_t_u((p_72 ^ ((safe_rshift_func_int16_t_s_u((safe_unary_minus_func_int16_t_s((safe_sub_func_uint64_t_u_u((l_103 , p_73), g_62)))), g_63)) != g_63))))), l_104[3][1])), g_57)) , (*g_16)))))) , 0x718CL) <= g_54), g_54))))))
    { /* block id: 22 */
        int32_t *l_110 = &g_39;
        (*g_77) = l_110;
    }
    else
    { /* block id: 24 */
        int32_t *l_111 = &g_39;
        (*g_77) = l_111;
    }
    return g_63;
}


/* ------------------------------------------ */
/* 
 * reads : g_78
 * writes: g_78
 */
static int8_t ** func_74(int32_t ** p_75, int64_t  p_76)
{ /* block id: 14 */
    (*p_75) = (*p_75);
    return &g_16;
}



/************************ statistics *************************
XXX max struct depth: 1
breakdown:
   depth: 0, occurrence: 41
   depth: 1, occurrence: 3
XXX total union variables: 1

XXX non-zero bitfields defined in structs: 3
XXX zero bitfields defined in structs: 0
XXX const bitfields defined in structs: 0
XXX volatile bitfields defined in structs: 1
XXX structs with bitfields in the program: 3
breakdown:
   indirect level: 0, occurrence: 3
XXX full-bitfields structs in the program: 2
breakdown:
   indirect level: 0, occurrence: 2
XXX times a bitfields struct's address is taken: 0
XXX times a bitfields struct on LHS: 0
XXX times a bitfields struct on RHS: 4
XXX times a single bitfield on LHS: 0
XXX times a single bitfield on RHS: 4

XXX max expression depth: 28
breakdown:
   depth: 1, occurrence: 34
   depth: 16, occurrence: 1
   depth: 17, occurrence: 1
   depth: 22, occurrence: 1
   depth: 28, occurrence: 1

XXX total number of pointers: 54

XXX times a variable address is taken: 58
XXX times a pointer is dereferenced on RHS: 10
breakdown:
   depth: 1, occurrence: 9
   depth: 2, occurrence: 1
XXX times a pointer is dereferenced on LHS: 14
breakdown:
   depth: 1, occurrence: 14
XXX times a pointer is compared with null: 0
XXX times a pointer is compared with address of another variable: 0
XXX times a pointer is compared with another pointer: 0
XXX times a pointer is qualified to be dereferenced: 296

XXX max dereference level: 2
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 30
   level: 2, occurrence: 5
XXX number of pointers point to pointers: 21
XXX number of pointers point to scalars: 33
XXX number of pointers point to structs: 0
XXX percent of pointers has null in alias set: 13
XXX average alias set size: 1.15

XXX times a non-volatile is read: 78
XXX times a non-volatile is write: 33
XXX times a volatile is read: 1
XXX    times read thru a pointer: 0
XXX times a volatile is write: 2
XXX    times written thru a pointer: 0
XXX times a volatile is available for access: 9
XXX percentage of non-volatile access: 97.4

XXX forward jumps: 0
XXX backward jumps: 0

XXX stmts: 26
XXX max block depth: 1
breakdown:
   depth: 0, occurrence: 20
   depth: 1, occurrence: 6

XXX percentage a fresh-made variable is used: 31.7
XXX percentage an existing variable is used: 68.3
FYI: the random generator makes assumptions about the integer size. See platform.info for more details.
********************* end of statistics **********************/

Bindgen Invocation

$ bindgen input.h --with-derive-partialeq --with-derive-eq

Actual Results

running 3 tests
test bindgen_test_layout_S0 ... ok
test bindgen_test_layout_U4 ... FAILED
test bindgen_test_layout_S2 ... FAILED

failures:

---- bindgen_test_layout_U4 stdout ----
	thread 'bindgen_test_layout_U4' panicked at 'assertion failed: `(left == right)`
  left: `16`,
 right: `8`: Size of: U4', /tmp/output-7qjh2751.rs:6:5485
note: Run with `RUST_BACKTRACE=1` for a backtrace.

---- bindgen_test_layout_S2 stdout ----
	thread 'bindgen_test_layout_S2' panicked at 'assertion failed: `(left == right)`
  left: `4`,
 right: `1`: Alignment of S2', /tmp/output-7qjh2751.rs:6:2289


failures:
    bindgen_test_layout_S2
    bindgen_test_layout_U4

test result: FAILED. 1 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out

Expected Results

No layout test failures.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions