// This file is distributed under the University of Illinois Open Source License.
// See LICENSE.TXT for details.
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: c_compiler -c %s -I "common" -o %t2.o
// RUN: linker -o %t1%exeext  %t1.o %t2.o
// RUN: runtool %t1%exeext | checker "TEST PASSED"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"

struct  BFs1ll_BFs1i_BFu1c_BFu1i  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1c_BFu1i) C1{ FL:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFs1i_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1c_BFu1i, BFs1ll_BFs1i_BFu1c_BFu1i)
//============================================================================


struct  BFs1ll_BFs1i_BFu1c_BFu1ll  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1c_BFu1ll) C1{ FL:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1ll_BFs1i_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1c_BFu1ll, BFs1ll_BFs1i_BFu1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1i_BFu1c_BFu1s  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1c_BFu1s) C1{ FL:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFs1i_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1c_BFu1s, BFs1ll_BFs1i_BFu1c_BFu1s)
//============================================================================


struct  BFs1ll_BFs1i_BFu1i  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1i) C1{ FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1i, BFs1ll_BFs1i_BFu1i)
//============================================================================


struct  BFs1ll_BFs1i_BFu1i_BFs1c  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1i_BFs1c) C1{ FL:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFs1i_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1i_BFs1c, BFs1ll_BFs1i_BFu1i_BFs1c)
//============================================================================


struct  BFs1ll_BFs1i_BFu1i_BFs1i  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1i_BFs1i) C1{ FL:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1i_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1i_BFs1i, BFs1ll_BFs1i_BFu1i_BFs1i)
//============================================================================


struct  BFs1ll_BFs1i_BFu1i_BFs1ll  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1i_BFs1ll) C1{ FL:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1i_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1i_BFs1ll, BFs1ll_BFs1i_BFu1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1i_BFu1i_BFs1s  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1i_BFs1s) C1{ FL:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1i_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1i_BFs1s, BFs1ll_BFs1i_BFu1i_BFs1s)
//============================================================================


struct  BFs1ll_BFs1i_BFu1i_BFu1c  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1i_BFu1c) C1{ FL:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFs1i_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1i_BFu1c, BFs1ll_BFs1i_BFu1i_BFu1c)
//============================================================================


struct  BFs1ll_BFs1i_BFu1i_BFu1i  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1i_BFu1i) C1{ FL:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1i_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1i_BFu1i, BFs1ll_BFs1i_BFu1i_BFu1i)
//============================================================================


struct  BFs1ll_BFs1i_BFu1i_BFu1ll  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1i_BFu1ll) C1{ FL:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1i_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1i_BFu1ll, BFs1ll_BFs1i_BFu1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1i_BFu1i_BFu1s  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1i_BFu1s) C1{ FL:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1i_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1i_BFu1s, BFs1ll_BFs1i_BFu1i_BFu1s)
//============================================================================


struct  BFs1ll_BFs1i_BFu1ll  {
  signed __tsi64 v1:1;
  signed int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1ll) C1{ FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1ll, BFs1ll_BFs1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1i_BFu1ll_BFs1c  {
  signed __tsi64 v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1ll_BFs1c) C1{ FL:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1i_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1ll_BFs1c, BFs1ll_BFs1i_BFu1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFs1i_BFu1ll_BFs1i  {
  signed __tsi64 v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1ll_BFs1i) C1{ FL:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1i_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1ll_BFs1i, BFs1ll_BFs1i_BFu1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFs1i_BFu1ll_BFs1ll  {
  signed __tsi64 v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1ll_BFs1ll) C1{ FL:1 Fi:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1i_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1ll_BFs1ll, BFs1ll_BFs1i_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1i_BFu1ll_BFs1s  {
  signed __tsi64 v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1ll_BFs1s) C1{ FL:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1i_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1ll_BFs1s, BFs1ll_BFs1i_BFu1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFs1i_BFu1ll_BFu1c  {
  signed __tsi64 v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1ll_BFu1c) C1{ FL:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1i_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1ll_BFu1c, BFs1ll_BFs1i_BFu1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFs1i_BFu1ll_BFu1i  {
  signed __tsi64 v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1ll_BFu1i) C1{ FL:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1i_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1ll_BFu1i, BFs1ll_BFs1i_BFu1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFs1i_BFu1ll_BFu1ll  {
  signed __tsi64 v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1ll_BFu1ll) C1{ FL:1 Fi:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1i_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1ll_BFu1ll, BFs1ll_BFs1i_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1i_BFu1ll_BFu1s  {
  signed __tsi64 v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1ll_BFu1s) C1{ FL:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1i_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1ll_BFu1s, BFs1ll_BFs1i_BFu1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFs1i_BFu1s  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1s) C1{ FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1s, BFs1ll_BFs1i_BFu1s)
//============================================================================


struct  BFs1ll_BFs1i_BFu1s_BFs1c  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1s_BFs1c) C1{ FL:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1i_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1s_BFs1c, BFs1ll_BFs1i_BFu1s_BFs1c)
//============================================================================


struct  BFs1ll_BFs1i_BFu1s_BFs1i  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1s_BFs1i) C1{ FL:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1i_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1s_BFs1i, BFs1ll_BFs1i_BFu1s_BFs1i)
//============================================================================


struct  BFs1ll_BFs1i_BFu1s_BFs1ll  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1s_BFs1ll) C1{ FL:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1i_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1s_BFs1ll, BFs1ll_BFs1i_BFu1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1i_BFu1s_BFs1s  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1s_BFs1s) C1{ FL:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1i_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1i_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1s_BFs1s, BFs1ll_BFs1i_BFu1s_BFs1s)
//============================================================================


struct  BFs1ll_BFs1i_BFu1s_BFu1c  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1s_BFu1c) C1{ FL:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1i_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1s_BFu1c, BFs1ll_BFs1i_BFu1s_BFu1c)
//============================================================================


struct  BFs1ll_BFs1i_BFu1s_BFu1i  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1s_BFu1i) C1{ FL:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1i_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1s_BFu1i, BFs1ll_BFs1i_BFu1s_BFu1i)
//============================================================================


struct  BFs1ll_BFs1i_BFu1s_BFu1ll  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1s_BFu1ll) C1{ FL:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1i_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1s_BFu1ll, BFs1ll_BFs1i_BFu1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1i_BFu1s_BFu1s  {
  signed __tsi64 v1:1;
  signed int v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1i_BFu1s_BFu1s) C1{ FL:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1i_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1i_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1i_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1i_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1i_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1i_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1i_BFu1s_BFu1s, BFs1ll_BFs1i_BFu1s_BFu1s)
//============================================================================


struct  BFs1ll_BFs1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
};
//SIG(1 BFs1ll_BFs1ll) C1{ FL:1 FL:1}



static void Test_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll, BFs1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1c) C1{ FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1c, BFs1ll_BFs1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1c_BFs1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1c_BFs1c) C1{ FL:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1c_BFs1c, BFs1ll_BFs1ll_BFs1c_BFs1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1c_BFs1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1c_BFs1i) C1{ FL:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1c_BFs1i, BFs1ll_BFs1ll_BFs1c_BFs1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1c_BFs1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1c_BFs1ll) C1{ FL:1 FL:1 Fc:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1c_BFs1ll, BFs1ll_BFs1ll_BFs1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1c_BFs1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1c_BFs1s) C1{ FL:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1c_BFs1s, BFs1ll_BFs1ll_BFs1c_BFs1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1c_BFu1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1c_BFu1c) C1{ FL:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1c_BFu1c, BFs1ll_BFs1ll_BFs1c_BFu1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1c_BFu1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1c_BFu1i) C1{ FL:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1c_BFu1i, BFs1ll_BFs1ll_BFs1c_BFu1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1c_BFu1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1c_BFu1ll) C1{ FL:1 FL:1 Fc:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1c_BFu1ll, BFs1ll_BFs1ll_BFs1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1c_BFu1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1c_BFu1s) C1{ FL:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1c_BFu1s, BFs1ll_BFs1ll_BFs1c_BFu1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1i) C1{ FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1i, BFs1ll_BFs1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1i_BFs1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1i_BFs1c) C1{ FL:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1i_BFs1c, BFs1ll_BFs1ll_BFs1i_BFs1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1i_BFs1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1i_BFs1i) C1{ FL:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1i_BFs1i, BFs1ll_BFs1ll_BFs1i_BFs1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1i_BFs1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1i_BFs1ll) C1{ FL:1 FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1i_BFs1ll, BFs1ll_BFs1ll_BFs1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1i_BFs1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1i_BFs1s) C1{ FL:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1i_BFs1s, BFs1ll_BFs1ll_BFs1i_BFs1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1i_BFu1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1i_BFu1c) C1{ FL:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1i_BFu1c, BFs1ll_BFs1ll_BFs1i_BFu1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1i_BFu1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1i_BFu1i) C1{ FL:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1i_BFu1i, BFs1ll_BFs1ll_BFs1i_BFu1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1i_BFu1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1i_BFu1ll) C1{ FL:1 FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1i_BFu1ll, BFs1ll_BFs1ll_BFs1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1i_BFu1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1i_BFu1s) C1{ FL:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1i_BFu1s, BFs1ll_BFs1ll_BFs1i_BFu1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1ll) C1{ FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1ll, BFs1ll_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1ll_BFs1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1ll_BFs1c) C1{ FL:1 FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1ll_BFs1c, BFs1ll_BFs1ll_BFs1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1ll_BFs1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1ll_BFs1i) C1{ FL:1 FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1ll_BFs1i, BFs1ll_BFs1ll_BFs1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1ll_BFs1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1ll_BFs1ll) C1{ FL:1 FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1ll_BFs1ll, BFs1ll_BFs1ll_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1ll_BFs1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1ll_BFs1s) C1{ FL:1 FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1ll_BFs1s, BFs1ll_BFs1ll_BFs1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1ll_BFu1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1ll_BFu1c) C1{ FL:1 FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1ll_BFu1c, BFs1ll_BFs1ll_BFs1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1ll_BFu1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1ll_BFu1i) C1{ FL:1 FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1ll_BFu1i, BFs1ll_BFs1ll_BFs1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1ll_BFu1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1ll_BFu1ll) C1{ FL:1 FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1ll_BFu1ll, BFs1ll_BFs1ll_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1ll_BFu1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1ll_BFu1s) C1{ FL:1 FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1ll_BFu1s, BFs1ll_BFs1ll_BFs1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1s) C1{ FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1s, BFs1ll_BFs1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1s_BFs1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1s_BFs1c) C1{ FL:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1s_BFs1c, BFs1ll_BFs1ll_BFs1s_BFs1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1s_BFs1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1s_BFs1i) C1{ FL:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1s_BFs1i, BFs1ll_BFs1ll_BFs1s_BFs1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1s_BFs1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1s_BFs1ll) C1{ FL:1 FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1s_BFs1ll, BFs1ll_BFs1ll_BFs1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1s_BFs1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1s_BFs1s) C1{ FL:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1s_BFs1s, BFs1ll_BFs1ll_BFs1s_BFs1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1s_BFu1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1s_BFu1c) C1{ FL:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1s_BFu1c, BFs1ll_BFs1ll_BFs1s_BFu1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1s_BFu1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1s_BFu1i) C1{ FL:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1s_BFu1i, BFs1ll_BFs1ll_BFs1s_BFu1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1s_BFu1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1s_BFu1ll) C1{ FL:1 FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1s_BFu1ll, BFs1ll_BFs1ll_BFs1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFs1s_BFu1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFs1s_BFu1s) C1{ FL:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFs1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFs1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFs1s_BFu1s, BFs1ll_BFs1ll_BFs1s_BFu1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1c) C1{ FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1c, BFs1ll_BFs1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1c_BFs1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1c_BFs1c) C1{ FL:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1c_BFs1c, BFs1ll_BFs1ll_BFu1c_BFs1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1c_BFs1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1c_BFs1i) C1{ FL:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1c_BFs1i, BFs1ll_BFs1ll_BFu1c_BFs1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1c_BFs1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1c_BFs1ll) C1{ FL:1 FL:1 Fc:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1c_BFs1ll, BFs1ll_BFs1ll_BFu1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1c_BFs1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1c_BFs1s) C1{ FL:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1c_BFs1s, BFs1ll_BFs1ll_BFu1c_BFs1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1c_BFu1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1c_BFu1c) C1{ FL:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1c_BFu1c, BFs1ll_BFs1ll_BFu1c_BFu1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1c_BFu1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1c_BFu1i) C1{ FL:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1c_BFu1i, BFs1ll_BFs1ll_BFu1c_BFu1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1c_BFu1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1c_BFu1ll) C1{ FL:1 FL:1 Fc:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1c_BFu1ll, BFs1ll_BFs1ll_BFu1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1c_BFu1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1c_BFu1s) C1{ FL:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1c_BFu1s, BFs1ll_BFs1ll_BFu1c_BFu1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1i) C1{ FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1i, BFs1ll_BFs1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1i_BFs1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1i_BFs1c) C1{ FL:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1i_BFs1c, BFs1ll_BFs1ll_BFu1i_BFs1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1i_BFs1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1i_BFs1i) C1{ FL:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1i_BFs1i, BFs1ll_BFs1ll_BFu1i_BFs1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1i_BFs1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1i_BFs1ll) C1{ FL:1 FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1i_BFs1ll, BFs1ll_BFs1ll_BFu1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1i_BFs1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1i_BFs1s) C1{ FL:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1i_BFs1s, BFs1ll_BFs1ll_BFu1i_BFs1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1i_BFu1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1i_BFu1c) C1{ FL:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1i_BFu1c, BFs1ll_BFs1ll_BFu1i_BFu1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1i_BFu1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1i_BFu1i) C1{ FL:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1i_BFu1i, BFs1ll_BFs1ll_BFu1i_BFu1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1i_BFu1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1i_BFu1ll) C1{ FL:1 FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1i_BFu1ll, BFs1ll_BFs1ll_BFu1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1i_BFu1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1i_BFu1s) C1{ FL:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1i_BFu1s, BFs1ll_BFs1ll_BFu1i_BFu1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1ll) C1{ FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1ll, BFs1ll_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1ll_BFs1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1ll_BFs1c) C1{ FL:1 FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1ll_BFs1c, BFs1ll_BFs1ll_BFu1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1ll_BFs1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1ll_BFs1i) C1{ FL:1 FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1ll_BFs1i, BFs1ll_BFs1ll_BFu1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1ll_BFs1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1ll_BFs1ll) C1{ FL:1 FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1ll_BFs1ll, BFs1ll_BFs1ll_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1ll_BFs1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1ll_BFs1s) C1{ FL:1 FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1ll_BFs1s, BFs1ll_BFs1ll_BFu1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1ll_BFu1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1ll_BFu1c) C1{ FL:1 FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1ll_BFu1c, BFs1ll_BFs1ll_BFu1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1ll_BFu1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1ll_BFu1i) C1{ FL:1 FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1ll_BFu1i, BFs1ll_BFs1ll_BFu1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1ll_BFu1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1ll_BFu1ll) C1{ FL:1 FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1ll_BFu1ll, BFs1ll_BFs1ll_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1ll_BFu1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1ll_BFu1s) C1{ FL:1 FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1ll_BFu1s, BFs1ll_BFs1ll_BFu1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1s) C1{ FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1s, BFs1ll_BFs1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1s_BFs1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1s_BFs1c) C1{ FL:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1s_BFs1c, BFs1ll_BFs1ll_BFu1s_BFs1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1s_BFs1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1s_BFs1i) C1{ FL:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1s_BFs1i, BFs1ll_BFs1ll_BFu1s_BFs1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1s_BFs1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1s_BFs1ll) C1{ FL:1 FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1s_BFs1ll, BFs1ll_BFs1ll_BFu1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1s_BFs1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1s_BFs1s) C1{ FL:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1s_BFs1s, BFs1ll_BFs1ll_BFu1s_BFs1s)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1s_BFu1c  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1s_BFu1c) C1{ FL:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1ll_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1s_BFu1c, BFs1ll_BFs1ll_BFu1s_BFu1c)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1s_BFu1i  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1s_BFu1i) C1{ FL:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1ll_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1s_BFu1i, BFs1ll_BFs1ll_BFu1s_BFu1i)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1s_BFu1ll  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1s_BFu1ll) C1{ FL:1 FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1ll_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1s_BFu1ll, BFs1ll_BFs1ll_BFu1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1ll_BFu1s_BFu1s  {
  signed __tsi64 v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1ll_BFu1s_BFu1s) C1{ FL:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1ll_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1ll_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1ll_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1ll_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1ll_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1ll_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1ll_BFu1s_BFu1s, BFs1ll_BFs1ll_BFu1s_BFu1s)
//============================================================================


struct  BFs1ll_BFs1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
};
//SIG(1 BFs1ll_BFs1s) C1{ FL:1 Fs:1}



static void Test_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s, BFs1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFs1s_BFs1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed char v3:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1c) C1{ FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1c, BFs1ll_BFs1s_BFs1c)
//============================================================================


struct  BFs1ll_BFs1s_BFs1c_BFs1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1c_BFs1c) C1{ FL:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1c_BFs1c, BFs1ll_BFs1s_BFs1c_BFs1c)
//============================================================================


struct  BFs1ll_BFs1s_BFs1c_BFs1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1c_BFs1i) C1{ FL:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1c_BFs1i, BFs1ll_BFs1s_BFs1c_BFs1i)
//============================================================================


struct  BFs1ll_BFs1s_BFs1c_BFs1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1c_BFs1ll) C1{ FL:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1ll_BFs1s_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1c_BFs1ll, BFs1ll_BFs1s_BFs1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFs1c_BFs1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1c_BFs1s) C1{ FL:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1c_BFs1s, BFs1ll_BFs1s_BFs1c_BFs1s)
//============================================================================


struct  BFs1ll_BFs1s_BFs1c_BFu1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1c_BFu1c) C1{ FL:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1c_BFu1c, BFs1ll_BFs1s_BFs1c_BFu1c)
//============================================================================


struct  BFs1ll_BFs1s_BFs1c_BFu1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1c_BFu1i) C1{ FL:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1c_BFu1i, BFs1ll_BFs1s_BFs1c_BFu1i)
//============================================================================


struct  BFs1ll_BFs1s_BFs1c_BFu1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1c_BFu1ll) C1{ FL:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1ll_BFs1s_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1c_BFu1ll, BFs1ll_BFs1s_BFs1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFs1c_BFu1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1c_BFu1s) C1{ FL:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1c_BFu1s, BFs1ll_BFs1s_BFs1c_BFu1s)
//============================================================================


struct  BFs1ll_BFs1s_BFs1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed int v3:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1i) C1{ FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1i, BFs1ll_BFs1s_BFs1i)
//============================================================================


struct  BFs1ll_BFs1s_BFs1i_BFs1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1i_BFs1c) C1{ FL:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1i_BFs1c, BFs1ll_BFs1s_BFs1i_BFs1c)
//============================================================================


struct  BFs1ll_BFs1s_BFs1i_BFs1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1i_BFs1i) C1{ FL:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1i_BFs1i, BFs1ll_BFs1s_BFs1i_BFs1i)
//============================================================================


struct  BFs1ll_BFs1s_BFs1i_BFs1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1i_BFs1ll) C1{ FL:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1s_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1i_BFs1ll, BFs1ll_BFs1s_BFs1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFs1i_BFs1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1i_BFs1s) C1{ FL:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1i_BFs1s, BFs1ll_BFs1s_BFs1i_BFs1s)
//============================================================================


struct  BFs1ll_BFs1s_BFs1i_BFu1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1i_BFu1c) C1{ FL:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1i_BFu1c, BFs1ll_BFs1s_BFs1i_BFu1c)
//============================================================================


struct  BFs1ll_BFs1s_BFs1i_BFu1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1i_BFu1i) C1{ FL:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1i_BFu1i, BFs1ll_BFs1s_BFs1i_BFu1i)
//============================================================================


struct  BFs1ll_BFs1s_BFs1i_BFu1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1i_BFu1ll) C1{ FL:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1s_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1i_BFu1ll, BFs1ll_BFs1s_BFs1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFs1i_BFu1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1i_BFu1s) C1{ FL:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1i_BFu1s, BFs1ll_BFs1s_BFs1i_BFu1s)
//============================================================================


struct  BFs1ll_BFs1s_BFs1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1ll) C1{ FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1ll, BFs1ll_BFs1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFs1ll_BFs1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1ll_BFs1c) C1{ FL:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1ll_BFs1c, BFs1ll_BFs1s_BFs1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFs1s_BFs1ll_BFs1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1ll_BFs1i) C1{ FL:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1ll_BFs1i, BFs1ll_BFs1s_BFs1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFs1s_BFs1ll_BFs1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1ll_BFs1ll) C1{ FL:1 Fs:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1s_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1ll_BFs1ll, BFs1ll_BFs1s_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFs1ll_BFs1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1ll_BFs1s) C1{ FL:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1ll_BFs1s, BFs1ll_BFs1s_BFs1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFs1s_BFs1ll_BFu1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1ll_BFu1c) C1{ FL:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1ll_BFu1c, BFs1ll_BFs1s_BFs1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFs1s_BFs1ll_BFu1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1ll_BFu1i) C1{ FL:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1ll_BFu1i, BFs1ll_BFs1s_BFs1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFs1s_BFs1ll_BFu1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1ll_BFu1ll) C1{ FL:1 Fs:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1s_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1ll_BFu1ll, BFs1ll_BFs1s_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFs1ll_BFu1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1ll_BFu1s) C1{ FL:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1ll_BFu1s, BFs1ll_BFs1s_BFs1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFs1s_BFs1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed short v3:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1s) C1{ FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1s, BFs1ll_BFs1s_BFs1s)
//============================================================================


struct  BFs1ll_BFs1s_BFs1s_BFs1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1s_BFs1c) C1{ FL:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1s_BFs1c, BFs1ll_BFs1s_BFs1s_BFs1c)
//============================================================================


struct  BFs1ll_BFs1s_BFs1s_BFs1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1s_BFs1i) C1{ FL:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1s_BFs1i, BFs1ll_BFs1s_BFs1s_BFs1i)
//============================================================================


struct  BFs1ll_BFs1s_BFs1s_BFs1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1s_BFs1ll) C1{ FL:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1s_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1s_BFs1ll, BFs1ll_BFs1s_BFs1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFs1s_BFs1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1s_BFs1s) C1{ FL:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1s_BFs1s, BFs1ll_BFs1s_BFs1s_BFs1s)
//============================================================================


struct  BFs1ll_BFs1s_BFs1s_BFu1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1s_BFu1c) C1{ FL:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1s_BFu1c, BFs1ll_BFs1s_BFs1s_BFu1c)
//============================================================================


struct  BFs1ll_BFs1s_BFs1s_BFu1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1s_BFu1i) C1{ FL:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1s_BFu1i, BFs1ll_BFs1s_BFs1s_BFu1i)
//============================================================================


struct  BFs1ll_BFs1s_BFs1s_BFu1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1s_BFu1ll) C1{ FL:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1s_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1s_BFu1ll, BFs1ll_BFs1s_BFs1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFs1s_BFu1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFs1s_BFu1s) C1{ FL:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFs1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFs1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFs1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFs1s_BFu1s, BFs1ll_BFs1s_BFs1s_BFu1s)
//============================================================================


struct  BFs1ll_BFs1s_BFu1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1c) C1{ FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1c, BFs1ll_BFs1s_BFu1c)
//============================================================================


struct  BFs1ll_BFs1s_BFu1c_BFs1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1c_BFs1c) C1{ FL:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1c_BFs1c, BFs1ll_BFs1s_BFu1c_BFs1c)
//============================================================================


struct  BFs1ll_BFs1s_BFu1c_BFs1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1c_BFs1i) C1{ FL:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1c_BFs1i, BFs1ll_BFs1s_BFu1c_BFs1i)
//============================================================================


struct  BFs1ll_BFs1s_BFu1c_BFs1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1c_BFs1ll) C1{ FL:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1ll_BFs1s_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1c_BFs1ll, BFs1ll_BFs1s_BFu1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFu1c_BFs1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1c_BFs1s) C1{ FL:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1c_BFs1s, BFs1ll_BFs1s_BFu1c_BFs1s)
//============================================================================


struct  BFs1ll_BFs1s_BFu1c_BFu1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1c_BFu1c) C1{ FL:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1c_BFu1c, BFs1ll_BFs1s_BFu1c_BFu1c)
//============================================================================


struct  BFs1ll_BFs1s_BFu1c_BFu1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1c_BFu1i) C1{ FL:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1c_BFu1i, BFs1ll_BFs1s_BFu1c_BFu1i)
//============================================================================


struct  BFs1ll_BFs1s_BFu1c_BFu1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1c_BFu1ll) C1{ FL:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1ll_BFs1s_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1c_BFu1ll, BFs1ll_BFs1s_BFu1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFu1c_BFu1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1c_BFu1s) C1{ FL:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1c_BFu1s, BFs1ll_BFs1s_BFu1c_BFu1s)
//============================================================================


struct  BFs1ll_BFs1s_BFu1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1i) C1{ FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1i, BFs1ll_BFs1s_BFu1i)
//============================================================================


struct  BFs1ll_BFs1s_BFu1i_BFs1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1i_BFs1c) C1{ FL:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1i_BFs1c, BFs1ll_BFs1s_BFu1i_BFs1c)
//============================================================================


struct  BFs1ll_BFs1s_BFu1i_BFs1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1i_BFs1i) C1{ FL:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1i_BFs1i, BFs1ll_BFs1s_BFu1i_BFs1i)
//============================================================================


struct  BFs1ll_BFs1s_BFu1i_BFs1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1i_BFs1ll) C1{ FL:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1s_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1i_BFs1ll, BFs1ll_BFs1s_BFu1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFu1i_BFs1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1i_BFs1s) C1{ FL:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1i_BFs1s, BFs1ll_BFs1s_BFu1i_BFs1s)
//============================================================================


struct  BFs1ll_BFs1s_BFu1i_BFu1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1i_BFu1c) C1{ FL:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1i_BFu1c, BFs1ll_BFs1s_BFu1i_BFu1c)
//============================================================================


struct  BFs1ll_BFs1s_BFu1i_BFu1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1i_BFu1i) C1{ FL:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1i_BFu1i, BFs1ll_BFs1s_BFu1i_BFu1i)
//============================================================================


struct  BFs1ll_BFs1s_BFu1i_BFu1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1i_BFu1ll) C1{ FL:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1ll_BFs1s_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1i_BFu1ll, BFs1ll_BFs1s_BFu1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFu1i_BFu1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1i_BFu1s) C1{ FL:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1i_BFu1s, BFs1ll_BFs1s_BFu1i_BFu1s)
//============================================================================


struct  BFs1ll_BFs1s_BFu1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1ll) C1{ FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1ll, BFs1ll_BFs1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFu1ll_BFs1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1ll_BFs1c) C1{ FL:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1ll_BFs1c, BFs1ll_BFs1s_BFu1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFs1s_BFu1ll_BFs1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1ll_BFs1i) C1{ FL:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1ll_BFs1i, BFs1ll_BFs1s_BFu1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFs1s_BFu1ll_BFs1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1ll_BFs1ll) C1{ FL:1 Fs:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1s_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1ll_BFs1ll, BFs1ll_BFs1s_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFu1ll_BFs1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1ll_BFs1s) C1{ FL:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1ll_BFs1s, BFs1ll_BFs1s_BFu1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFs1s_BFu1ll_BFu1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1ll_BFu1c) C1{ FL:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1ll_BFu1c, BFs1ll_BFs1s_BFu1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFs1s_BFu1ll_BFu1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1ll_BFu1i) C1{ FL:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1ll_BFu1i, BFs1ll_BFs1s_BFu1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFs1s_BFu1ll_BFu1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1ll_BFu1ll) C1{ FL:1 Fs:1 FL:1 FL:1}



static void Test_BFs1ll_BFs1s_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1ll_BFu1ll, BFs1ll_BFs1s_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFu1ll_BFu1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1ll_BFu1s) C1{ FL:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1ll_BFu1s, BFs1ll_BFs1s_BFu1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFs1s_BFu1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1s) C1{ FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1s, BFs1ll_BFs1s_BFu1s)
//============================================================================


struct  BFs1ll_BFs1s_BFu1s_BFs1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1s_BFs1c) C1{ FL:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1s_BFs1c, BFs1ll_BFs1s_BFu1s_BFs1c)
//============================================================================


struct  BFs1ll_BFs1s_BFu1s_BFs1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1s_BFs1i) C1{ FL:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1s_BFs1i, BFs1ll_BFs1s_BFu1s_BFs1i)
//============================================================================


struct  BFs1ll_BFs1s_BFu1s_BFs1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1s_BFs1ll) C1{ FL:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1s_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1s_BFs1ll, BFs1ll_BFs1s_BFu1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFu1s_BFs1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1s_BFs1s) C1{ FL:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFs1s_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1s_BFs1s, BFs1ll_BFs1s_BFu1s_BFs1s)
//============================================================================


struct  BFs1ll_BFs1s_BFu1s_BFu1c  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1s_BFu1c) C1{ FL:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFs1s_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1s_BFu1c, BFs1ll_BFs1s_BFu1s_BFu1c)
//============================================================================


struct  BFs1ll_BFs1s_BFu1s_BFu1i  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1s_BFu1i) C1{ FL:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFs1s_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1s_BFu1i, BFs1ll_BFs1s_BFu1s_BFu1i)
//============================================================================


struct  BFs1ll_BFs1s_BFu1s_BFu1ll  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1s_BFu1ll) C1{ FL:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1ll_BFs1s_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1s_BFu1ll, BFs1ll_BFs1s_BFu1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFs1s_BFu1s_BFu1s  {
  signed __tsi64 v1:1;
  signed short v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFs1s_BFu1s_BFu1s) C1{ FL:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFs1s_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFs1s_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFs1s_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFs1s_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFs1s_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFs1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1ll_BFs1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFs1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFs1s_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFs1s_BFu1s_BFu1s, BFs1ll_BFs1s_BFu1s_BFu1s)
//============================================================================


struct  BFs1ll_BFu1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
};
//SIG(1 BFs1ll_BFu1c) C1{ FL:1 Fc:1}



static void Test_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c, BFs1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFu1c_BFs1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed char v3:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1c) C1{ FL:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1c, BFs1ll_BFu1c_BFs1c)
//============================================================================


struct  BFs1ll_BFu1c_BFs1c_BFs1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1c_BFs1c) C1{ FL:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1c_BFs1c, BFs1ll_BFu1c_BFs1c_BFs1c)
//============================================================================


struct  BFs1ll_BFu1c_BFs1c_BFs1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1c_BFs1i) C1{ FL:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1c_BFs1i, BFs1ll_BFu1c_BFs1c_BFs1i)
//============================================================================


struct  BFs1ll_BFu1c_BFs1c_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1c_BFs1ll) C1{ FL:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1c_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1c_BFs1ll, BFs1ll_BFu1c_BFs1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFs1c_BFs1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1c_BFs1s) C1{ FL:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1c_BFs1s, BFs1ll_BFu1c_BFs1c_BFs1s)
//============================================================================


struct  BFs1ll_BFu1c_BFs1c_BFu1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1c_BFu1c) C1{ FL:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1c_BFu1c, BFs1ll_BFu1c_BFs1c_BFu1c)
//============================================================================


struct  BFs1ll_BFu1c_BFs1c_BFu1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1c_BFu1i) C1{ FL:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1c_BFu1i, BFs1ll_BFu1c_BFs1c_BFu1i)
//============================================================================


struct  BFs1ll_BFu1c_BFs1c_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1c_BFu1ll) C1{ FL:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1c_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1c_BFu1ll, BFs1ll_BFu1c_BFs1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFs1c_BFu1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1c_BFu1s) C1{ FL:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1c_BFu1s, BFs1ll_BFu1c_BFs1c_BFu1s)
//============================================================================


struct  BFs1ll_BFu1c_BFs1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed int v3:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1i) C1{ FL:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1i, BFs1ll_BFu1c_BFs1i)
//============================================================================


struct  BFs1ll_BFu1c_BFs1i_BFs1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1i_BFs1c) C1{ FL:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1i_BFs1c, BFs1ll_BFu1c_BFs1i_BFs1c)
//============================================================================


struct  BFs1ll_BFu1c_BFs1i_BFs1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1i_BFs1i) C1{ FL:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1i_BFs1i, BFs1ll_BFu1c_BFs1i_BFs1i)
//============================================================================


struct  BFs1ll_BFu1c_BFs1i_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1i_BFs1ll) C1{ FL:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1c_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1i_BFs1ll, BFs1ll_BFu1c_BFs1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFs1i_BFs1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1i_BFs1s) C1{ FL:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1i_BFs1s, BFs1ll_BFu1c_BFs1i_BFs1s)
//============================================================================


struct  BFs1ll_BFu1c_BFs1i_BFu1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1i_BFu1c) C1{ FL:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1i_BFu1c, BFs1ll_BFu1c_BFs1i_BFu1c)
//============================================================================


struct  BFs1ll_BFu1c_BFs1i_BFu1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1i_BFu1i) C1{ FL:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1i_BFu1i, BFs1ll_BFu1c_BFs1i_BFu1i)
//============================================================================


struct  BFs1ll_BFu1c_BFs1i_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1i_BFu1ll) C1{ FL:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1c_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1i_BFu1ll, BFs1ll_BFu1c_BFs1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFs1i_BFu1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1i_BFu1s) C1{ FL:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1i_BFu1s, BFs1ll_BFu1c_BFs1i_BFu1s)
//============================================================================


struct  BFs1ll_BFu1c_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1ll) C1{ FL:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1ll, BFs1ll_BFu1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFs1ll_BFs1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1ll_BFs1c) C1{ FL:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1ll_BFs1c, BFs1ll_BFu1c_BFs1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFu1c_BFs1ll_BFs1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1ll_BFs1i) C1{ FL:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1ll_BFs1i, BFs1ll_BFu1c_BFs1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFu1c_BFs1ll_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1ll_BFs1ll) C1{ FL:1 Fc:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1c_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1ll_BFs1ll, BFs1ll_BFu1c_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFs1ll_BFs1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1ll_BFs1s) C1{ FL:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1ll_BFs1s, BFs1ll_BFu1c_BFs1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFu1c_BFs1ll_BFu1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1ll_BFu1c) C1{ FL:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1ll_BFu1c, BFs1ll_BFu1c_BFs1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFu1c_BFs1ll_BFu1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1ll_BFu1i) C1{ FL:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1ll_BFu1i, BFs1ll_BFu1c_BFs1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFu1c_BFs1ll_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1ll_BFu1ll) C1{ FL:1 Fc:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1c_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1ll_BFu1ll, BFs1ll_BFu1c_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFs1ll_BFu1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1ll_BFu1s) C1{ FL:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1ll_BFu1s, BFs1ll_BFu1c_BFs1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFu1c_BFs1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed short v3:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1s) C1{ FL:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1s, BFs1ll_BFu1c_BFs1s)
//============================================================================


struct  BFs1ll_BFu1c_BFs1s_BFs1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1s_BFs1c) C1{ FL:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1s_BFs1c, BFs1ll_BFu1c_BFs1s_BFs1c)
//============================================================================


struct  BFs1ll_BFu1c_BFs1s_BFs1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1s_BFs1i) C1{ FL:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1s_BFs1i, BFs1ll_BFu1c_BFs1s_BFs1i)
//============================================================================


struct  BFs1ll_BFu1c_BFs1s_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1s_BFs1ll) C1{ FL:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1c_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1s_BFs1ll, BFs1ll_BFu1c_BFs1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFs1s_BFs1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1s_BFs1s) C1{ FL:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1s_BFs1s, BFs1ll_BFu1c_BFs1s_BFs1s)
//============================================================================


struct  BFs1ll_BFu1c_BFs1s_BFu1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1s_BFu1c) C1{ FL:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1s_BFu1c, BFs1ll_BFu1c_BFs1s_BFu1c)
//============================================================================


struct  BFs1ll_BFu1c_BFs1s_BFu1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1s_BFu1i) C1{ FL:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1s_BFu1i, BFs1ll_BFu1c_BFs1s_BFu1i)
//============================================================================


struct  BFs1ll_BFu1c_BFs1s_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1s_BFu1ll) C1{ FL:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1c_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1s_BFu1ll, BFs1ll_BFu1c_BFs1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFs1s_BFu1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFs1s_BFu1s) C1{ FL:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFs1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFs1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1c_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFs1s_BFu1s, BFs1ll_BFu1c_BFs1s_BFu1s)
//============================================================================


struct  BFs1ll_BFu1c_BFu1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1c) C1{ FL:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1c, BFs1ll_BFu1c_BFu1c)
//============================================================================


struct  BFs1ll_BFu1c_BFu1c_BFs1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1c_BFs1c) C1{ FL:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1c_BFs1c, BFs1ll_BFu1c_BFu1c_BFs1c)
//============================================================================


struct  BFs1ll_BFu1c_BFu1c_BFs1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1c_BFs1i) C1{ FL:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1c_BFs1i, BFs1ll_BFu1c_BFu1c_BFs1i)
//============================================================================


struct  BFs1ll_BFu1c_BFu1c_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1c_BFs1ll) C1{ FL:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1c_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1c_BFs1ll, BFs1ll_BFu1c_BFu1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFu1c_BFs1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1c_BFs1s) C1{ FL:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1c_BFs1s, BFs1ll_BFu1c_BFu1c_BFs1s)
//============================================================================


struct  BFs1ll_BFu1c_BFu1c_BFu1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1c_BFu1c) C1{ FL:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1c_BFu1c, BFs1ll_BFu1c_BFu1c_BFu1c)
//============================================================================


struct  BFs1ll_BFu1c_BFu1c_BFu1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1c_BFu1i) C1{ FL:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1c_BFu1i, BFs1ll_BFu1c_BFu1c_BFu1i)
//============================================================================


struct  BFs1ll_BFu1c_BFu1c_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1c_BFu1ll) C1{ FL:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1c_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1c_BFu1ll, BFs1ll_BFu1c_BFu1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFu1c_BFu1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1c_BFu1s) C1{ FL:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1c_BFu1s, BFs1ll_BFu1c_BFu1c_BFu1s)
//============================================================================


struct  BFs1ll_BFu1c_BFu1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1i) C1{ FL:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1i, BFs1ll_BFu1c_BFu1i)
//============================================================================


struct  BFs1ll_BFu1c_BFu1i_BFs1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1i_BFs1c) C1{ FL:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1i_BFs1c, BFs1ll_BFu1c_BFu1i_BFs1c)
//============================================================================


struct  BFs1ll_BFu1c_BFu1i_BFs1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1i_BFs1i) C1{ FL:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1i_BFs1i, BFs1ll_BFu1c_BFu1i_BFs1i)
//============================================================================


struct  BFs1ll_BFu1c_BFu1i_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1i_BFs1ll) C1{ FL:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1c_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1i_BFs1ll, BFs1ll_BFu1c_BFu1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFu1i_BFs1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1i_BFs1s) C1{ FL:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1i_BFs1s, BFs1ll_BFu1c_BFu1i_BFs1s)
//============================================================================


struct  BFs1ll_BFu1c_BFu1i_BFu1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1i_BFu1c) C1{ FL:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1i_BFu1c, BFs1ll_BFu1c_BFu1i_BFu1c)
//============================================================================


struct  BFs1ll_BFu1c_BFu1i_BFu1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1i_BFu1i) C1{ FL:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1i_BFu1i, BFs1ll_BFu1c_BFu1i_BFu1i)
//============================================================================


struct  BFs1ll_BFu1c_BFu1i_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1i_BFu1ll) C1{ FL:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1c_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1i_BFu1ll, BFs1ll_BFu1c_BFu1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFu1i_BFu1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1i_BFu1s) C1{ FL:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1i_BFu1s, BFs1ll_BFu1c_BFu1i_BFu1s)
//============================================================================


struct  BFs1ll_BFu1c_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1ll) C1{ FL:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1ll, BFs1ll_BFu1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFu1ll_BFs1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1ll_BFs1c) C1{ FL:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1ll_BFs1c, BFs1ll_BFu1c_BFu1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFu1c_BFu1ll_BFs1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1ll_BFs1i) C1{ FL:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1ll_BFs1i, BFs1ll_BFu1c_BFu1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFu1c_BFu1ll_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1ll_BFs1ll) C1{ FL:1 Fc:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1c_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1ll_BFs1ll, BFs1ll_BFu1c_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFu1ll_BFs1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1ll_BFs1s) C1{ FL:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1ll_BFs1s, BFs1ll_BFu1c_BFu1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFu1c_BFu1ll_BFu1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1ll_BFu1c) C1{ FL:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1ll_BFu1c, BFs1ll_BFu1c_BFu1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFu1c_BFu1ll_BFu1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1ll_BFu1i) C1{ FL:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1ll_BFu1i, BFs1ll_BFu1c_BFu1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFu1c_BFu1ll_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1ll_BFu1ll) C1{ FL:1 Fc:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1c_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1ll_BFu1ll, BFs1ll_BFu1c_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFu1ll_BFu1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1ll_BFu1s) C1{ FL:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1ll_BFu1s, BFs1ll_BFu1c_BFu1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFu1c_BFu1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1s) C1{ FL:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1s, BFs1ll_BFu1c_BFu1s)
//============================================================================


struct  BFs1ll_BFu1c_BFu1s_BFs1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1s_BFs1c) C1{ FL:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1s_BFs1c, BFs1ll_BFu1c_BFu1s_BFs1c)
//============================================================================


struct  BFs1ll_BFu1c_BFu1s_BFs1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1s_BFs1i) C1{ FL:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1s_BFs1i, BFs1ll_BFu1c_BFu1s_BFs1i)
//============================================================================


struct  BFs1ll_BFu1c_BFu1s_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1s_BFs1ll) C1{ FL:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1c_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1s_BFs1ll, BFs1ll_BFu1c_BFu1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFu1s_BFs1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1s_BFs1s) C1{ FL:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1c_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1s_BFs1s, BFs1ll_BFu1c_BFu1s_BFs1s)
//============================================================================


struct  BFs1ll_BFu1c_BFu1s_BFu1c  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1s_BFu1c) C1{ FL:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1c_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1s_BFu1c, BFs1ll_BFu1c_BFu1s_BFu1c)
//============================================================================


struct  BFs1ll_BFu1c_BFu1s_BFu1i  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1s_BFu1i) C1{ FL:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1c_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1s_BFu1i, BFs1ll_BFu1c_BFu1s_BFu1i)
//============================================================================


struct  BFs1ll_BFu1c_BFu1s_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1s_BFu1ll) C1{ FL:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1c_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1s_BFu1ll, BFs1ll_BFu1c_BFu1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1c_BFu1s_BFu1s  {
  signed __tsi64 v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1c_BFu1s_BFu1s) C1{ FL:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1c_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1c_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1c_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1c_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1c_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1c_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1c_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1c_BFu1s_BFu1s, BFs1ll_BFu1c_BFu1s_BFu1s)
//============================================================================


struct  BFs1ll_BFu1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
};
//SIG(1 BFs1ll_BFu1i) C1{ FL:1 Fi:1}



static void Test_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i, BFs1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFu1i_BFs1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed char v3:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1c) C1{ FL:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1c, BFs1ll_BFu1i_BFs1c)
//============================================================================


struct  BFs1ll_BFu1i_BFs1c_BFs1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1c_BFs1c) C1{ FL:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1c_BFs1c, BFs1ll_BFu1i_BFs1c_BFs1c)
//============================================================================


struct  BFs1ll_BFu1i_BFs1c_BFs1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1c_BFs1i) C1{ FL:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1c_BFs1i, BFs1ll_BFu1i_BFs1c_BFs1i)
//============================================================================


struct  BFs1ll_BFu1i_BFs1c_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1c_BFs1ll) C1{ FL:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1i_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1c_BFs1ll, BFs1ll_BFu1i_BFs1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFs1c_BFs1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1c_BFs1s) C1{ FL:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1c_BFs1s, BFs1ll_BFu1i_BFs1c_BFs1s)
//============================================================================


struct  BFs1ll_BFu1i_BFs1c_BFu1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1c_BFu1c) C1{ FL:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1c_BFu1c, BFs1ll_BFu1i_BFs1c_BFu1c)
//============================================================================


struct  BFs1ll_BFu1i_BFs1c_BFu1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1c_BFu1i) C1{ FL:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1c_BFu1i, BFs1ll_BFu1i_BFs1c_BFu1i)
//============================================================================


struct  BFs1ll_BFu1i_BFs1c_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1c_BFu1ll) C1{ FL:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1i_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1c_BFu1ll, BFs1ll_BFu1i_BFs1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFs1c_BFu1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1c_BFu1s) C1{ FL:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1c_BFu1s, BFs1ll_BFu1i_BFs1c_BFu1s)
//============================================================================


struct  BFs1ll_BFu1i_BFs1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed int v3:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1i) C1{ FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1i, BFs1ll_BFu1i_BFs1i)
//============================================================================


struct  BFs1ll_BFu1i_BFs1i_BFs1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1i_BFs1c) C1{ FL:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1i_BFs1c, BFs1ll_BFu1i_BFs1i_BFs1c)
//============================================================================


struct  BFs1ll_BFu1i_BFs1i_BFs1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1i_BFs1i) C1{ FL:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1i_BFs1i, BFs1ll_BFu1i_BFs1i_BFs1i)
//============================================================================


struct  BFs1ll_BFu1i_BFs1i_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1i_BFs1ll) C1{ FL:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1i_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1i_BFs1ll, BFs1ll_BFu1i_BFs1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFs1i_BFs1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1i_BFs1s) C1{ FL:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1i_BFs1s, BFs1ll_BFu1i_BFs1i_BFs1s)
//============================================================================


struct  BFs1ll_BFu1i_BFs1i_BFu1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1i_BFu1c) C1{ FL:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1i_BFu1c, BFs1ll_BFu1i_BFs1i_BFu1c)
//============================================================================


struct  BFs1ll_BFu1i_BFs1i_BFu1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1i_BFu1i) C1{ FL:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1i_BFu1i, BFs1ll_BFu1i_BFs1i_BFu1i)
//============================================================================


struct  BFs1ll_BFu1i_BFs1i_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1i_BFu1ll) C1{ FL:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1i_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1i_BFu1ll, BFs1ll_BFu1i_BFs1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFs1i_BFu1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1i_BFu1s) C1{ FL:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1i_BFu1s, BFs1ll_BFu1i_BFs1i_BFu1s)
//============================================================================


struct  BFs1ll_BFu1i_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1ll) C1{ FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1ll, BFs1ll_BFu1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFs1ll_BFs1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1ll_BFs1c) C1{ FL:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1ll_BFs1c, BFs1ll_BFu1i_BFs1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFu1i_BFs1ll_BFs1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1ll_BFs1i) C1{ FL:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1ll_BFs1i, BFs1ll_BFu1i_BFs1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFu1i_BFs1ll_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1ll_BFs1ll) C1{ FL:1 Fi:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1i_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1ll_BFs1ll, BFs1ll_BFu1i_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFs1ll_BFs1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1ll_BFs1s) C1{ FL:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1ll_BFs1s, BFs1ll_BFu1i_BFs1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFu1i_BFs1ll_BFu1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1ll_BFu1c) C1{ FL:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1ll_BFu1c, BFs1ll_BFu1i_BFs1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFu1i_BFs1ll_BFu1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1ll_BFu1i) C1{ FL:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1ll_BFu1i, BFs1ll_BFu1i_BFs1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFu1i_BFs1ll_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1ll_BFu1ll) C1{ FL:1 Fi:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1i_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1ll_BFu1ll, BFs1ll_BFu1i_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFs1ll_BFu1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1ll_BFu1s) C1{ FL:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1ll_BFu1s, BFs1ll_BFu1i_BFs1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFu1i_BFs1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed short v3:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1s) C1{ FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1s, BFs1ll_BFu1i_BFs1s)
//============================================================================


struct  BFs1ll_BFu1i_BFs1s_BFs1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1s_BFs1c) C1{ FL:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1s_BFs1c, BFs1ll_BFu1i_BFs1s_BFs1c)
//============================================================================


struct  BFs1ll_BFu1i_BFs1s_BFs1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1s_BFs1i) C1{ FL:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1s_BFs1i, BFs1ll_BFu1i_BFs1s_BFs1i)
//============================================================================


struct  BFs1ll_BFu1i_BFs1s_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1s_BFs1ll) C1{ FL:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1i_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1s_BFs1ll, BFs1ll_BFu1i_BFs1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFs1s_BFs1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1s_BFs1s) C1{ FL:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1s_BFs1s, BFs1ll_BFu1i_BFs1s_BFs1s)
//============================================================================


struct  BFs1ll_BFu1i_BFs1s_BFu1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1s_BFu1c) C1{ FL:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1s_BFu1c, BFs1ll_BFu1i_BFs1s_BFu1c)
//============================================================================


struct  BFs1ll_BFu1i_BFs1s_BFu1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1s_BFu1i) C1{ FL:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1s_BFu1i, BFs1ll_BFu1i_BFs1s_BFu1i)
//============================================================================


struct  BFs1ll_BFu1i_BFs1s_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1s_BFu1ll) C1{ FL:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1i_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1s_BFu1ll, BFs1ll_BFu1i_BFs1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFs1s_BFu1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFs1s_BFu1s) C1{ FL:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFs1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFs1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1i_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFs1s_BFu1s, BFs1ll_BFu1i_BFs1s_BFu1s)
//============================================================================


struct  BFs1ll_BFu1i_BFu1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1c) C1{ FL:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1c, BFs1ll_BFu1i_BFu1c)
//============================================================================


struct  BFs1ll_BFu1i_BFu1c_BFs1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1c_BFs1c) C1{ FL:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1c_BFs1c, BFs1ll_BFu1i_BFu1c_BFs1c)
//============================================================================


struct  BFs1ll_BFu1i_BFu1c_BFs1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1c_BFs1i) C1{ FL:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1c_BFs1i, BFs1ll_BFu1i_BFu1c_BFs1i)
//============================================================================


struct  BFs1ll_BFu1i_BFu1c_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1c_BFs1ll) C1{ FL:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1i_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1c_BFs1ll, BFs1ll_BFu1i_BFu1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFu1c_BFs1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1c_BFs1s) C1{ FL:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1c_BFs1s, BFs1ll_BFu1i_BFu1c_BFs1s)
//============================================================================


struct  BFs1ll_BFu1i_BFu1c_BFu1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1c_BFu1c) C1{ FL:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1c_BFu1c, BFs1ll_BFu1i_BFu1c_BFu1c)
//============================================================================


struct  BFs1ll_BFu1i_BFu1c_BFu1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1c_BFu1i) C1{ FL:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1c_BFu1i, BFs1ll_BFu1i_BFu1c_BFu1i)
//============================================================================


struct  BFs1ll_BFu1i_BFu1c_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1c_BFu1ll) C1{ FL:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1i_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1c_BFu1ll, BFs1ll_BFu1i_BFu1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFu1c_BFu1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1c_BFu1s) C1{ FL:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1c_BFu1s, BFs1ll_BFu1i_BFu1c_BFu1s)
//============================================================================


struct  BFs1ll_BFu1i_BFu1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1i) C1{ FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1i, BFs1ll_BFu1i_BFu1i)
//============================================================================


struct  BFs1ll_BFu1i_BFu1i_BFs1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1i_BFs1c) C1{ FL:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1i_BFs1c, BFs1ll_BFu1i_BFu1i_BFs1c)
//============================================================================


struct  BFs1ll_BFu1i_BFu1i_BFs1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1i_BFs1i) C1{ FL:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1i_BFs1i, BFs1ll_BFu1i_BFu1i_BFs1i)
//============================================================================


struct  BFs1ll_BFu1i_BFu1i_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1i_BFs1ll) C1{ FL:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1i_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1i_BFs1ll, BFs1ll_BFu1i_BFu1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFu1i_BFs1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1i_BFs1s) C1{ FL:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1i_BFs1s, BFs1ll_BFu1i_BFu1i_BFs1s)
//============================================================================


struct  BFs1ll_BFu1i_BFu1i_BFu1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1i_BFu1c) C1{ FL:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1i_BFu1c, BFs1ll_BFu1i_BFu1i_BFu1c)
//============================================================================


struct  BFs1ll_BFu1i_BFu1i_BFu1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1i_BFu1i) C1{ FL:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1i_BFu1i, BFs1ll_BFu1i_BFu1i_BFu1i)
//============================================================================


struct  BFs1ll_BFu1i_BFu1i_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1i_BFu1ll) C1{ FL:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1i_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1i_BFu1ll, BFs1ll_BFu1i_BFu1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFu1i_BFu1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1i_BFu1s) C1{ FL:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1i_BFu1s, BFs1ll_BFu1i_BFu1i_BFu1s)
//============================================================================


struct  BFs1ll_BFu1i_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1ll) C1{ FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1ll, BFs1ll_BFu1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFu1ll_BFs1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1ll_BFs1c) C1{ FL:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1ll_BFs1c, BFs1ll_BFu1i_BFu1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFu1i_BFu1ll_BFs1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1ll_BFs1i) C1{ FL:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1ll_BFs1i, BFs1ll_BFu1i_BFu1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFu1i_BFu1ll_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1ll_BFs1ll) C1{ FL:1 Fi:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1i_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1ll_BFs1ll, BFs1ll_BFu1i_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFu1ll_BFs1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1ll_BFs1s) C1{ FL:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1ll_BFs1s, BFs1ll_BFu1i_BFu1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFu1i_BFu1ll_BFu1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1ll_BFu1c) C1{ FL:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1ll_BFu1c, BFs1ll_BFu1i_BFu1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFu1i_BFu1ll_BFu1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1ll_BFu1i) C1{ FL:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1ll_BFu1i, BFs1ll_BFu1i_BFu1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFu1i_BFu1ll_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1ll_BFu1ll) C1{ FL:1 Fi:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1i_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1ll_BFu1ll, BFs1ll_BFu1i_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFu1ll_BFu1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1ll_BFu1s) C1{ FL:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1ll_BFu1s, BFs1ll_BFu1i_BFu1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFu1i_BFu1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1s) C1{ FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1s, BFs1ll_BFu1i_BFu1s)
//============================================================================


struct  BFs1ll_BFu1i_BFu1s_BFs1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1s_BFs1c) C1{ FL:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1s_BFs1c, BFs1ll_BFu1i_BFu1s_BFs1c)
//============================================================================


struct  BFs1ll_BFu1i_BFu1s_BFs1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1s_BFs1i) C1{ FL:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1s_BFs1i, BFs1ll_BFu1i_BFu1s_BFs1i)
//============================================================================


struct  BFs1ll_BFu1i_BFu1s_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1s_BFs1ll) C1{ FL:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1i_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1s_BFs1ll, BFs1ll_BFu1i_BFu1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFu1s_BFs1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1s_BFs1s) C1{ FL:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1i_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1s_BFs1s, BFs1ll_BFu1i_BFu1s_BFs1s)
//============================================================================


struct  BFs1ll_BFu1i_BFu1s_BFu1c  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1s_BFu1c) C1{ FL:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1i_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1s_BFu1c, BFs1ll_BFu1i_BFu1s_BFu1c)
//============================================================================


struct  BFs1ll_BFu1i_BFu1s_BFu1i  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1s_BFu1i) C1{ FL:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1i_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1s_BFu1i, BFs1ll_BFu1i_BFu1s_BFu1i)
//============================================================================


struct  BFs1ll_BFu1i_BFu1s_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1s_BFu1ll) C1{ FL:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1i_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1s_BFu1ll, BFs1ll_BFu1i_BFu1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1i_BFu1s_BFu1s  {
  signed __tsi64 v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1i_BFu1s_BFu1s) C1{ FL:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1i_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1i_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1i_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1i_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1i_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1i_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1i_BFu1s_BFu1s, BFs1ll_BFu1i_BFu1s_BFu1s)
//============================================================================


struct  BFs1ll_BFu1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
};
//SIG(1 BFs1ll_BFu1ll) C1{ FL:1 FL:1}



static void Test_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll, BFs1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed char v3:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1c) C1{ FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1c, BFs1ll_BFu1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1c_BFs1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1c_BFs1c) C1{ FL:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1c_BFs1c, BFs1ll_BFu1ll_BFs1c_BFs1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1c_BFs1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1c_BFs1i) C1{ FL:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1c_BFs1i, BFs1ll_BFu1ll_BFs1c_BFs1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1c_BFs1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1c_BFs1ll) C1{ FL:1 FL:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1c_BFs1ll, BFs1ll_BFu1ll_BFs1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1c_BFs1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1c_BFs1s) C1{ FL:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1c_BFs1s, BFs1ll_BFu1ll_BFs1c_BFs1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1c_BFu1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1c_BFu1c) C1{ FL:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1c_BFu1c, BFs1ll_BFu1ll_BFs1c_BFu1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1c_BFu1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1c_BFu1i) C1{ FL:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1c_BFu1i, BFs1ll_BFu1ll_BFs1c_BFu1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1c_BFu1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1c_BFu1ll) C1{ FL:1 FL:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1c_BFu1ll, BFs1ll_BFu1ll_BFs1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1c_BFu1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1c_BFu1s) C1{ FL:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1c_BFu1s, BFs1ll_BFu1ll_BFs1c_BFu1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed int v3:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1i) C1{ FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1i, BFs1ll_BFu1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1i_BFs1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1i_BFs1c) C1{ FL:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1i_BFs1c, BFs1ll_BFu1ll_BFs1i_BFs1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1i_BFs1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1i_BFs1i) C1{ FL:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1i_BFs1i, BFs1ll_BFu1ll_BFs1i_BFs1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1i_BFs1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1i_BFs1ll) C1{ FL:1 FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1i_BFs1ll, BFs1ll_BFu1ll_BFs1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1i_BFs1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1i_BFs1s) C1{ FL:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1i_BFs1s, BFs1ll_BFu1ll_BFs1i_BFs1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1i_BFu1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1i_BFu1c) C1{ FL:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1i_BFu1c, BFs1ll_BFu1ll_BFs1i_BFu1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1i_BFu1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1i_BFu1i) C1{ FL:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1i_BFu1i, BFs1ll_BFu1ll_BFs1i_BFu1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1i_BFu1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1i_BFu1ll) C1{ FL:1 FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1i_BFu1ll, BFs1ll_BFu1ll_BFs1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1i_BFu1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1i_BFu1s) C1{ FL:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1i_BFu1s, BFs1ll_BFu1ll_BFs1i_BFu1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1ll) C1{ FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1ll, BFs1ll_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1ll_BFs1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1ll_BFs1c) C1{ FL:1 FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1ll_BFs1c, BFs1ll_BFu1ll_BFs1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1ll_BFs1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1ll_BFs1i) C1{ FL:1 FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1ll_BFs1i, BFs1ll_BFu1ll_BFs1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1ll_BFs1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1ll_BFs1ll) C1{ FL:1 FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1ll_BFs1ll, BFs1ll_BFu1ll_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1ll_BFs1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1ll_BFs1s) C1{ FL:1 FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1ll_BFs1s, BFs1ll_BFu1ll_BFs1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1ll_BFu1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1ll_BFu1c) C1{ FL:1 FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1ll_BFu1c, BFs1ll_BFu1ll_BFs1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1ll_BFu1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1ll_BFu1i) C1{ FL:1 FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1ll_BFu1i, BFs1ll_BFu1ll_BFs1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1ll_BFu1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1ll_BFu1ll) C1{ FL:1 FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1ll_BFu1ll, BFs1ll_BFu1ll_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1ll_BFu1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1ll_BFu1s) C1{ FL:1 FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1ll_BFu1s, BFs1ll_BFu1ll_BFs1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed short v3:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1s) C1{ FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1s, BFs1ll_BFu1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1s_BFs1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1s_BFs1c) C1{ FL:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1s_BFs1c, BFs1ll_BFu1ll_BFs1s_BFs1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1s_BFs1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1s_BFs1i) C1{ FL:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1s_BFs1i, BFs1ll_BFu1ll_BFs1s_BFs1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1s_BFs1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1s_BFs1ll) C1{ FL:1 FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1s_BFs1ll, BFs1ll_BFu1ll_BFs1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1s_BFs1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1s_BFs1s) C1{ FL:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1s_BFs1s, BFs1ll_BFu1ll_BFs1s_BFs1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1s_BFu1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1s_BFu1c) C1{ FL:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1s_BFu1c, BFs1ll_BFu1ll_BFs1s_BFu1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1s_BFu1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1s_BFu1i) C1{ FL:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1s_BFu1i, BFs1ll_BFu1ll_BFs1s_BFu1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1s_BFu1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1s_BFu1ll) C1{ FL:1 FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1s_BFu1ll, BFs1ll_BFu1ll_BFs1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFs1s_BFu1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFs1s_BFu1s) C1{ FL:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFs1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFs1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFs1s_BFu1s, BFs1ll_BFu1ll_BFs1s_BFu1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1c) C1{ FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1c, BFs1ll_BFu1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1c_BFs1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1c_BFs1c) C1{ FL:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1c_BFs1c, BFs1ll_BFu1ll_BFu1c_BFs1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1c_BFs1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1c_BFs1i) C1{ FL:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1c_BFs1i, BFs1ll_BFu1ll_BFu1c_BFs1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1c_BFs1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1c_BFs1ll) C1{ FL:1 FL:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1c_BFs1ll, BFs1ll_BFu1ll_BFu1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1c_BFs1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1c_BFs1s) C1{ FL:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1c_BFs1s, BFs1ll_BFu1ll_BFu1c_BFs1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1c_BFu1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1c_BFu1c) C1{ FL:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1c_BFu1c, BFs1ll_BFu1ll_BFu1c_BFu1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1c_BFu1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1c_BFu1i) C1{ FL:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1c_BFu1i, BFs1ll_BFu1ll_BFu1c_BFu1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1c_BFu1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1c_BFu1ll) C1{ FL:1 FL:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1c_BFu1ll, BFs1ll_BFu1ll_BFu1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1c_BFu1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1c_BFu1s) C1{ FL:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1c_BFu1s, BFs1ll_BFu1ll_BFu1c_BFu1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1i) C1{ FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1i, BFs1ll_BFu1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1i_BFs1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1i_BFs1c) C1{ FL:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1i_BFs1c, BFs1ll_BFu1ll_BFu1i_BFs1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1i_BFs1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1i_BFs1i) C1{ FL:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1i_BFs1i, BFs1ll_BFu1ll_BFu1i_BFs1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1i_BFs1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1i_BFs1ll) C1{ FL:1 FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1i_BFs1ll, BFs1ll_BFu1ll_BFu1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1i_BFs1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1i_BFs1s) C1{ FL:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1i_BFs1s, BFs1ll_BFu1ll_BFu1i_BFs1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1i_BFu1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1i_BFu1c) C1{ FL:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1i_BFu1c, BFs1ll_BFu1ll_BFu1i_BFu1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1i_BFu1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1i_BFu1i) C1{ FL:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1i_BFu1i, BFs1ll_BFu1ll_BFu1i_BFu1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1i_BFu1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1i_BFu1ll) C1{ FL:1 FL:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1i_BFu1ll, BFs1ll_BFu1ll_BFu1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1i_BFu1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1i_BFu1s) C1{ FL:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1i_BFu1s, BFs1ll_BFu1ll_BFu1i_BFu1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1ll) C1{ FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1ll, BFs1ll_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1ll_BFs1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1ll_BFs1c) C1{ FL:1 FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1ll_BFs1c, BFs1ll_BFu1ll_BFu1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1ll_BFs1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1ll_BFs1i) C1{ FL:1 FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1ll_BFs1i, BFs1ll_BFu1ll_BFu1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1ll_BFs1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1ll_BFs1ll) C1{ FL:1 FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1ll_BFs1ll, BFs1ll_BFu1ll_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1ll_BFs1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1ll_BFs1s) C1{ FL:1 FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1ll_BFs1s, BFs1ll_BFu1ll_BFu1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1ll_BFu1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1ll_BFu1c) C1{ FL:1 FL:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1ll_BFu1c, BFs1ll_BFu1ll_BFu1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1ll_BFu1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1ll_BFu1i) C1{ FL:1 FL:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1ll_BFu1i, BFs1ll_BFu1ll_BFu1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1ll_BFu1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1ll_BFu1ll) C1{ FL:1 FL:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1ll_BFu1ll, BFs1ll_BFu1ll_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1ll_BFu1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1ll_BFu1s) C1{ FL:1 FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1ll_BFu1s, BFs1ll_BFu1ll_BFu1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1s) C1{ FL:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1s, BFs1ll_BFu1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1s_BFs1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1s_BFs1c) C1{ FL:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1s_BFs1c, BFs1ll_BFu1ll_BFu1s_BFs1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1s_BFs1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1s_BFs1i) C1{ FL:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1s_BFs1i, BFs1ll_BFu1ll_BFu1s_BFs1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1s_BFs1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1s_BFs1ll) C1{ FL:1 FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1s_BFs1ll, BFs1ll_BFu1ll_BFu1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1s_BFs1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1s_BFs1s) C1{ FL:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1s_BFs1s, BFs1ll_BFu1ll_BFu1s_BFs1s)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1s_BFu1c  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1s_BFu1c) C1{ FL:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1ll_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1s_BFu1c, BFs1ll_BFu1ll_BFu1s_BFu1c)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1s_BFu1i  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1s_BFu1i) C1{ FL:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1ll_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1s_BFu1i, BFs1ll_BFu1ll_BFu1s_BFu1i)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1s_BFu1ll  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1s_BFu1ll) C1{ FL:1 FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1ll_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1s_BFu1ll, BFs1ll_BFu1ll_BFu1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1ll_BFu1s_BFu1s  {
  signed __tsi64 v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1ll_BFu1s_BFu1s) C1{ FL:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1ll_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1ll_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1ll_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1ll_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1ll_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1ll_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1ll_BFu1s_BFu1s, BFs1ll_BFu1ll_BFu1s_BFu1s)
//============================================================================


struct  BFs1ll_BFu1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
};
//SIG(1 BFs1ll_BFu1s) C1{ FL:1 Fs:1}



static void Test_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s, BFs1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFu1s_BFs1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed char v3:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1c) C1{ FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1c, BFs1ll_BFu1s_BFs1c)
//============================================================================


struct  BFs1ll_BFu1s_BFs1c_BFs1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1c_BFs1c) C1{ FL:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1c_BFs1c, BFs1ll_BFu1s_BFs1c_BFs1c)
//============================================================================


struct  BFs1ll_BFu1s_BFs1c_BFs1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1c_BFs1i) C1{ FL:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1c_BFs1i, BFs1ll_BFu1s_BFs1c_BFs1i)
//============================================================================


struct  BFs1ll_BFu1s_BFs1c_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1c_BFs1ll) C1{ FL:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1s_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1c_BFs1ll, BFs1ll_BFu1s_BFs1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFs1c_BFs1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1c_BFs1s) C1{ FL:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1c_BFs1s, BFs1ll_BFu1s_BFs1c_BFs1s)
//============================================================================


struct  BFs1ll_BFu1s_BFs1c_BFu1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1c_BFu1c) C1{ FL:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1c_BFu1c, BFs1ll_BFu1s_BFs1c_BFu1c)
//============================================================================


struct  BFs1ll_BFu1s_BFs1c_BFu1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1c_BFu1i) C1{ FL:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1c_BFu1i, BFs1ll_BFu1s_BFs1c_BFu1i)
//============================================================================


struct  BFs1ll_BFu1s_BFs1c_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1c_BFu1ll) C1{ FL:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1s_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1c_BFu1ll, BFs1ll_BFu1s_BFs1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFs1c_BFu1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1c_BFu1s) C1{ FL:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1c_BFu1s, BFs1ll_BFu1s_BFs1c_BFu1s)
//============================================================================


struct  BFs1ll_BFu1s_BFs1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed int v3:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1i) C1{ FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1i, BFs1ll_BFu1s_BFs1i)
//============================================================================


struct  BFs1ll_BFu1s_BFs1i_BFs1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1i_BFs1c) C1{ FL:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1i_BFs1c, BFs1ll_BFu1s_BFs1i_BFs1c)
//============================================================================


struct  BFs1ll_BFu1s_BFs1i_BFs1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1i_BFs1i) C1{ FL:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1i_BFs1i, BFs1ll_BFu1s_BFs1i_BFs1i)
//============================================================================


struct  BFs1ll_BFu1s_BFs1i_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1i_BFs1ll) C1{ FL:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1s_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1i_BFs1ll, BFs1ll_BFu1s_BFs1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFs1i_BFs1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1i_BFs1s) C1{ FL:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1i_BFs1s, BFs1ll_BFu1s_BFs1i_BFs1s)
//============================================================================


struct  BFs1ll_BFu1s_BFs1i_BFu1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1i_BFu1c) C1{ FL:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1i_BFu1c, BFs1ll_BFu1s_BFs1i_BFu1c)
//============================================================================


struct  BFs1ll_BFu1s_BFs1i_BFu1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1i_BFu1i) C1{ FL:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1i_BFu1i, BFs1ll_BFu1s_BFs1i_BFu1i)
//============================================================================


struct  BFs1ll_BFu1s_BFs1i_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1i_BFu1ll) C1{ FL:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1s_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1i_BFu1ll, BFs1ll_BFu1s_BFs1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFs1i_BFu1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1i_BFu1s) C1{ FL:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1i_BFu1s, BFs1ll_BFu1s_BFs1i_BFu1s)
//============================================================================


struct  BFs1ll_BFu1s_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1ll) C1{ FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1ll, BFs1ll_BFu1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFs1ll_BFs1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1ll_BFs1c) C1{ FL:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1ll_BFs1c, BFs1ll_BFu1s_BFs1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFu1s_BFs1ll_BFs1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1ll_BFs1i) C1{ FL:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1ll_BFs1i, BFs1ll_BFu1s_BFs1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFu1s_BFs1ll_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1ll_BFs1ll) C1{ FL:1 Fs:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1s_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1ll_BFs1ll, BFs1ll_BFu1s_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFs1ll_BFs1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1ll_BFs1s) C1{ FL:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1ll_BFs1s, BFs1ll_BFu1s_BFs1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFu1s_BFs1ll_BFu1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1ll_BFu1c) C1{ FL:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1ll_BFu1c, BFs1ll_BFu1s_BFs1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFu1s_BFs1ll_BFu1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1ll_BFu1i) C1{ FL:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1ll_BFu1i, BFs1ll_BFu1s_BFs1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFu1s_BFs1ll_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1ll_BFu1ll) C1{ FL:1 Fs:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1s_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1ll_BFu1ll, BFs1ll_BFu1s_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFs1ll_BFu1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1ll_BFu1s) C1{ FL:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1ll_BFu1s, BFs1ll_BFu1s_BFs1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFu1s_BFs1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed short v3:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1s) C1{ FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1s, BFs1ll_BFu1s_BFs1s)
//============================================================================


struct  BFs1ll_BFu1s_BFs1s_BFs1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1s_BFs1c) C1{ FL:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1s_BFs1c, BFs1ll_BFu1s_BFs1s_BFs1c)
//============================================================================


struct  BFs1ll_BFu1s_BFs1s_BFs1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1s_BFs1i) C1{ FL:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1s_BFs1i, BFs1ll_BFu1s_BFs1s_BFs1i)
//============================================================================


struct  BFs1ll_BFu1s_BFs1s_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1s_BFs1ll) C1{ FL:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1s_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1s_BFs1ll, BFs1ll_BFu1s_BFs1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFs1s_BFs1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1s_BFs1s) C1{ FL:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1s_BFs1s, BFs1ll_BFu1s_BFs1s_BFs1s)
//============================================================================


struct  BFs1ll_BFu1s_BFs1s_BFu1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1s_BFu1c) C1{ FL:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1s_BFu1c, BFs1ll_BFu1s_BFs1s_BFu1c)
//============================================================================


struct  BFs1ll_BFu1s_BFs1s_BFu1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1s_BFu1i) C1{ FL:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1s_BFu1i, BFs1ll_BFu1s_BFs1s_BFu1i)
//============================================================================


struct  BFs1ll_BFu1s_BFs1s_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1s_BFu1ll) C1{ FL:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1s_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1s_BFu1ll, BFs1ll_BFu1s_BFs1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFs1s_BFu1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFs1s_BFu1s) C1{ FL:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFs1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFs1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1ll_BFu1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFs1s_BFu1s, BFs1ll_BFu1s_BFs1s_BFu1s)
//============================================================================


struct  BFs1ll_BFu1s_BFu1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1c) C1{ FL:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1c, BFs1ll_BFu1s_BFu1c)
//============================================================================


struct  BFs1ll_BFu1s_BFu1c_BFs1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1c_BFs1c) C1{ FL:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1c_BFs1c, BFs1ll_BFu1s_BFu1c_BFs1c)
//============================================================================


struct  BFs1ll_BFu1s_BFu1c_BFs1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1c_BFs1i) C1{ FL:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1c_BFs1i, BFs1ll_BFu1s_BFu1c_BFs1i)
//============================================================================


struct  BFs1ll_BFu1s_BFu1c_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1c_BFs1ll) C1{ FL:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1s_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1c_BFs1ll, BFs1ll_BFu1s_BFu1c_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFu1c_BFs1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1c_BFs1s) C1{ FL:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1c_BFs1s, BFs1ll_BFu1s_BFu1c_BFs1s)
//============================================================================


struct  BFs1ll_BFu1s_BFu1c_BFu1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1c_BFu1c) C1{ FL:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1c_BFu1c, BFs1ll_BFu1s_BFu1c_BFu1c)
//============================================================================


struct  BFs1ll_BFu1s_BFu1c_BFu1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1c_BFu1i) C1{ FL:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1c_BFu1i, BFs1ll_BFu1s_BFu1c_BFu1i)
//============================================================================


struct  BFs1ll_BFu1s_BFu1c_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1c_BFu1ll) C1{ FL:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1ll_BFu1s_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1c_BFu1ll, BFs1ll_BFu1s_BFu1c_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFu1c_BFu1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1c_BFu1s) C1{ FL:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1c_BFu1s, BFs1ll_BFu1s_BFu1c_BFu1s)
//============================================================================


struct  BFs1ll_BFu1s_BFu1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1i) C1{ FL:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1i, BFs1ll_BFu1s_BFu1i)
//============================================================================


struct  BFs1ll_BFu1s_BFu1i_BFs1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1i_BFs1c) C1{ FL:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1i_BFs1c, BFs1ll_BFu1s_BFu1i_BFs1c)
//============================================================================


struct  BFs1ll_BFu1s_BFu1i_BFs1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1i_BFs1i) C1{ FL:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1i_BFs1i, BFs1ll_BFu1s_BFu1i_BFs1i)
//============================================================================


struct  BFs1ll_BFu1s_BFu1i_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1i_BFs1ll) C1{ FL:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1s_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1i_BFs1ll, BFs1ll_BFu1s_BFu1i_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFu1i_BFs1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1i_BFs1s) C1{ FL:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1i_BFs1s, BFs1ll_BFu1s_BFu1i_BFs1s)
//============================================================================


struct  BFs1ll_BFu1s_BFu1i_BFu1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1i_BFu1c) C1{ FL:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1i_BFu1c, BFs1ll_BFu1s_BFu1i_BFu1c)
//============================================================================


struct  BFs1ll_BFu1s_BFu1i_BFu1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1i_BFu1i) C1{ FL:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1i_BFu1i, BFs1ll_BFu1s_BFu1i_BFu1i)
//============================================================================


struct  BFs1ll_BFu1s_BFu1i_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1i_BFu1ll) C1{ FL:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1ll_BFu1s_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1i_BFu1ll, BFs1ll_BFu1s_BFu1i_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFu1i_BFu1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1i_BFu1s) C1{ FL:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1i_BFu1s, BFs1ll_BFu1s_BFu1i_BFu1s)
//============================================================================


struct  BFs1ll_BFu1s_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1ll) C1{ FL:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1ll, BFs1ll_BFu1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFu1ll_BFs1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1ll_BFs1c) C1{ FL:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1ll_BFs1c, BFs1ll_BFu1s_BFu1ll_BFs1c)
//============================================================================


struct  BFs1ll_BFu1s_BFu1ll_BFs1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1ll_BFs1i) C1{ FL:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1ll_BFs1i, BFs1ll_BFu1s_BFu1ll_BFs1i)
//============================================================================


struct  BFs1ll_BFu1s_BFu1ll_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1ll_BFs1ll) C1{ FL:1 Fs:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1s_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1ll_BFs1ll, BFs1ll_BFu1s_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFu1ll_BFs1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1ll_BFs1s) C1{ FL:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1ll_BFs1s, BFs1ll_BFu1s_BFu1ll_BFs1s)
//============================================================================


struct  BFs1ll_BFu1s_BFu1ll_BFu1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1ll_BFu1c) C1{ FL:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1ll_BFu1c, BFs1ll_BFu1s_BFu1ll_BFu1c)
//============================================================================


struct  BFs1ll_BFu1s_BFu1ll_BFu1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1ll_BFu1i) C1{ FL:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1ll_BFu1i, BFs1ll_BFu1s_BFu1ll_BFu1i)
//============================================================================


struct  BFs1ll_BFu1s_BFu1ll_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1ll_BFu1ll) C1{ FL:1 Fs:1 FL:1 FL:1}



static void Test_BFs1ll_BFu1s_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1ll_BFu1ll, BFs1ll_BFu1s_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFu1ll_BFu1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1ll_BFu1s) C1{ FL:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1ll_BFu1s, BFs1ll_BFu1s_BFu1ll_BFu1s)
//============================================================================


struct  BFs1ll_BFu1s_BFu1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1s) C1{ FL:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1s, BFs1ll_BFu1s_BFu1s)
//============================================================================


struct  BFs1ll_BFu1s_BFu1s_BFs1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1s_BFs1c) C1{ FL:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1s_BFs1c, BFs1ll_BFu1s_BFu1s_BFs1c)
//============================================================================


struct  BFs1ll_BFu1s_BFu1s_BFs1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1s_BFs1i) C1{ FL:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1s_BFs1i, BFs1ll_BFu1s_BFu1s_BFs1i)
//============================================================================


struct  BFs1ll_BFu1s_BFu1s_BFs1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1s_BFs1ll) C1{ FL:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1s_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1s_BFs1ll, BFs1ll_BFu1s_BFu1s_BFs1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFu1s_BFs1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1s_BFs1s) C1{ FL:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1ll_BFu1s_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1s_BFs1s, BFs1ll_BFu1s_BFu1s_BFs1s)
//============================================================================


struct  BFs1ll_BFu1s_BFu1s_BFu1c  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1s_BFu1c) C1{ FL:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1ll_BFu1s_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1s_BFu1c, BFs1ll_BFu1s_BFu1s_BFu1c)
//============================================================================


struct  BFs1ll_BFu1s_BFu1s_BFu1i  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1s_BFu1i) C1{ FL:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1ll_BFu1s_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1s_BFu1i, BFs1ll_BFu1s_BFu1s_BFu1i)
//============================================================================


struct  BFs1ll_BFu1s_BFu1s_BFu1ll  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1s_BFu1ll) C1{ FL:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1ll_BFu1s_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1s_BFu1ll, BFs1ll_BFu1s_BFu1s_BFu1ll)
//============================================================================


struct  BFs1ll_BFu1s_BFu1s_BFu1s  {
  signed __tsi64 v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1ll_BFu1s_BFu1s_BFu1s) C1{ FL:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1ll_BFu1s_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1ll_BFu1s_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1ll_BFu1s_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1ll_BFu1s_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1ll_BFu1s_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1ll_BFu1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1ll_BFu1s_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1ll_BFu1s_BFu1s_BFu1s, BFs1ll_BFu1s_BFu1s_BFu1s)
//============================================================================


struct  BFs1s_BFs1c  {
  signed short v1:1;
  signed char v2:1;
};
//SIG(1 BFs1s_BFs1c) C1{ Fs:1 Fc:1}



static void Test_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c, BFs1s_BFs1c)
//============================================================================


struct  BFs1s_BFs1c_BFs1c  {
  signed short v1:1;
  signed char v2:1;
  signed char v3:1;
};
//SIG(1 BFs1s_BFs1c_BFs1c) C1{ Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1c, BFs1s_BFs1c_BFs1c)
//============================================================================


struct  BFs1s_BFs1c_BFs1c_BFs1c  {
  signed short v1:1;
  signed char v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1c_BFs1c) C1{ Fs:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1c_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1c_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFs1c_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1c_BFs1c, BFs1s_BFs1c_BFs1c_BFs1c)
//============================================================================


struct  BFs1s_BFs1c_BFs1c_BFs1i  {
  signed short v1:1;
  signed char v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1c_BFs1i) C1{ Fs:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1c_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1c_BFs1i, BFs1s_BFs1c_BFs1c_BFs1i)
//============================================================================


struct  BFs1s_BFs1c_BFs1c_BFs1ll  {
  signed short v1:1;
  signed char v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1c_BFs1ll) C1{ Fs:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1c_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1c_BFs1ll, BFs1s_BFs1c_BFs1c_BFs1ll)
//============================================================================


struct  BFs1s_BFs1c_BFs1c_BFs1s  {
  signed short v1:1;
  signed char v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1c_BFs1s) C1{ Fs:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1c_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1c_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFs1c_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1c_BFs1s, BFs1s_BFs1c_BFs1c_BFs1s)
//============================================================================


struct  BFs1s_BFs1c_BFs1c_BFu1c  {
  signed short v1:1;
  signed char v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1c_BFu1c) C1{ Fs:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1c_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFs1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1c_BFu1c, BFs1s_BFs1c_BFs1c_BFu1c)
//============================================================================


struct  BFs1s_BFs1c_BFs1c_BFu1i  {
  signed short v1:1;
  signed char v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1c_BFu1i) C1{ Fs:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1c_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1c_BFu1i, BFs1s_BFs1c_BFs1c_BFu1i)
//============================================================================


struct  BFs1s_BFs1c_BFs1c_BFu1ll  {
  signed short v1:1;
  signed char v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1c_BFu1ll) C1{ Fs:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1c_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1c_BFu1ll, BFs1s_BFs1c_BFs1c_BFu1ll)
//============================================================================


struct  BFs1s_BFs1c_BFs1c_BFu1s  {
  signed short v1:1;
  signed char v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1c_BFu1s) C1{ Fs:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1c_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFs1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1c_BFu1s, BFs1s_BFs1c_BFs1c_BFu1s)
//============================================================================


struct  BFs1s_BFs1c_BFs1i  {
  signed short v1:1;
  signed char v2:1;
  signed int v3:1;
};
//SIG(1 BFs1s_BFs1c_BFs1i) C1{ Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1i, BFs1s_BFs1c_BFs1i)
//============================================================================


struct  BFs1s_BFs1c_BFs1i_BFs1c  {
  signed short v1:1;
  signed char v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1i_BFs1c) C1{ Fs:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1c_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1i_BFs1c, BFs1s_BFs1c_BFs1i_BFs1c)
//============================================================================


struct  BFs1s_BFs1c_BFs1i_BFs1i  {
  signed short v1:1;
  signed char v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1i_BFs1i) C1{ Fs:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1c_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1i_BFs1i, BFs1s_BFs1c_BFs1i_BFs1i)
//============================================================================


struct  BFs1s_BFs1c_BFs1i_BFs1ll  {
  signed short v1:1;
  signed char v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1i_BFs1ll) C1{ Fs:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1c_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1i_BFs1ll, BFs1s_BFs1c_BFs1i_BFs1ll)
//============================================================================


struct  BFs1s_BFs1c_BFs1i_BFs1s  {
  signed short v1:1;
  signed char v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1i_BFs1s) C1{ Fs:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1c_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1i_BFs1s, BFs1s_BFs1c_BFs1i_BFs1s)
//============================================================================


struct  BFs1s_BFs1c_BFs1i_BFu1c  {
  signed short v1:1;
  signed char v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1i_BFu1c) C1{ Fs:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1c_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1i_BFu1c, BFs1s_BFs1c_BFs1i_BFu1c)
//============================================================================


struct  BFs1s_BFs1c_BFs1i_BFu1i  {
  signed short v1:1;
  signed char v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1i_BFu1i) C1{ Fs:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1c_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1i_BFu1i, BFs1s_BFs1c_BFs1i_BFu1i)
//============================================================================


struct  BFs1s_BFs1c_BFs1i_BFu1ll  {
  signed short v1:1;
  signed char v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1i_BFu1ll) C1{ Fs:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1c_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1i_BFu1ll, BFs1s_BFs1c_BFs1i_BFu1ll)
//============================================================================


struct  BFs1s_BFs1c_BFs1i_BFu1s  {
  signed short v1:1;
  signed char v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1i_BFu1s) C1{ Fs:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1c_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1i_BFu1s, BFs1s_BFs1c_BFs1i_BFu1s)
//============================================================================


struct  BFs1s_BFs1c_BFs1ll  {
  signed short v1:1;
  signed char v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1s_BFs1c_BFs1ll) C1{ Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1ll, BFs1s_BFs1c_BFs1ll)
//============================================================================


struct  BFs1s_BFs1c_BFs1ll_BFs1c  {
  signed short v1:1;
  signed char v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1ll_BFs1c) C1{ Fs:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1c_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1ll_BFs1c, BFs1s_BFs1c_BFs1ll_BFs1c)
//============================================================================


struct  BFs1s_BFs1c_BFs1ll_BFs1i  {
  signed short v1:1;
  signed char v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1ll_BFs1i) C1{ Fs:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1c_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1ll_BFs1i, BFs1s_BFs1c_BFs1ll_BFs1i)
//============================================================================


struct  BFs1s_BFs1c_BFs1ll_BFs1ll  {
  signed short v1:1;
  signed char v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1ll_BFs1ll) C1{ Fs:1 Fc:1 FL:1 FL:1}



static void Test_BFs1s_BFs1c_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1ll_BFs1ll, BFs1s_BFs1c_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFs1c_BFs1ll_BFs1s  {
  signed short v1:1;
  signed char v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1ll_BFs1s) C1{ Fs:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1c_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1ll_BFs1s, BFs1s_BFs1c_BFs1ll_BFs1s)
//============================================================================


struct  BFs1s_BFs1c_BFs1ll_BFu1c  {
  signed short v1:1;
  signed char v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1ll_BFu1c) C1{ Fs:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1c_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1ll_BFu1c, BFs1s_BFs1c_BFs1ll_BFu1c)
//============================================================================


struct  BFs1s_BFs1c_BFs1ll_BFu1i  {
  signed short v1:1;
  signed char v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1ll_BFu1i) C1{ Fs:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1c_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1ll_BFu1i, BFs1s_BFs1c_BFs1ll_BFu1i)
//============================================================================


struct  BFs1s_BFs1c_BFs1ll_BFu1ll  {
  signed short v1:1;
  signed char v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1ll_BFu1ll) C1{ Fs:1 Fc:1 FL:1 FL:1}



static void Test_BFs1s_BFs1c_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1ll_BFu1ll, BFs1s_BFs1c_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFs1c_BFs1ll_BFu1s  {
  signed short v1:1;
  signed char v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1ll_BFu1s) C1{ Fs:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1c_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1ll_BFu1s, BFs1s_BFs1c_BFs1ll_BFu1s)
//============================================================================


struct  BFs1s_BFs1c_BFs1s  {
  signed short v1:1;
  signed char v2:1;
  signed short v3:1;
};
//SIG(1 BFs1s_BFs1c_BFs1s) C1{ Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1s, BFs1s_BFs1c_BFs1s)
//============================================================================


struct  BFs1s_BFs1c_BFs1s_BFs1c  {
  signed short v1:1;
  signed char v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1s_BFs1c) C1{ Fs:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1c_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFs1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1s_BFs1c, BFs1s_BFs1c_BFs1s_BFs1c)
//============================================================================


struct  BFs1s_BFs1c_BFs1s_BFs1i  {
  signed short v1:1;
  signed char v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1s_BFs1i) C1{ Fs:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1c_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1s_BFs1i, BFs1s_BFs1c_BFs1s_BFs1i)
//============================================================================


struct  BFs1s_BFs1c_BFs1s_BFs1ll  {
  signed short v1:1;
  signed char v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1s_BFs1ll) C1{ Fs:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1c_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1s_BFs1ll, BFs1s_BFs1c_BFs1s_BFs1ll)
//============================================================================


struct  BFs1s_BFs1c_BFs1s_BFs1s  {
  signed short v1:1;
  signed char v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1s_BFs1s) C1{ Fs:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1c_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFs1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1s_BFs1s, BFs1s_BFs1c_BFs1s_BFs1s)
//============================================================================


struct  BFs1s_BFs1c_BFs1s_BFu1c  {
  signed short v1:1;
  signed char v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1s_BFu1c) C1{ Fs:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1c_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFs1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1s_BFu1c, BFs1s_BFs1c_BFs1s_BFu1c)
//============================================================================


struct  BFs1s_BFs1c_BFs1s_BFu1i  {
  signed short v1:1;
  signed char v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1s_BFu1i) C1{ Fs:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1c_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFs1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1s_BFu1i, BFs1s_BFs1c_BFs1s_BFu1i)
//============================================================================


struct  BFs1s_BFs1c_BFs1s_BFu1ll  {
  signed short v1:1;
  signed char v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1s_BFu1ll) C1{ Fs:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1c_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1s_BFu1ll, BFs1s_BFs1c_BFs1s_BFu1ll)
//============================================================================


struct  BFs1s_BFs1c_BFs1s_BFu1s  {
  signed short v1:1;
  signed char v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFs1s_BFu1s) C1{ Fs:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1c_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFs1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFs1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1c_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFs1s_BFu1s, BFs1s_BFs1c_BFs1s_BFu1s)
//============================================================================


struct  BFs1s_BFs1c_BFu1c  {
  signed short v1:1;
  signed char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1s_BFs1c_BFu1c) C1{ Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1c, BFs1s_BFs1c_BFu1c)
//============================================================================


struct  BFs1s_BFs1c_BFu1c_BFs1c  {
  signed short v1:1;
  signed char v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1c_BFs1c) C1{ Fs:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1c_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1c_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFu1c_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1c_BFs1c, BFs1s_BFs1c_BFu1c_BFs1c)
//============================================================================


struct  BFs1s_BFs1c_BFu1c_BFs1i  {
  signed short v1:1;
  signed char v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1c_BFs1i) C1{ Fs:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1c_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1c_BFs1i, BFs1s_BFs1c_BFu1c_BFs1i)
//============================================================================


struct  BFs1s_BFs1c_BFu1c_BFs1ll  {
  signed short v1:1;
  signed char v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1c_BFs1ll) C1{ Fs:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1c_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1c_BFs1ll, BFs1s_BFs1c_BFu1c_BFs1ll)
//============================================================================


struct  BFs1s_BFs1c_BFu1c_BFs1s  {
  signed short v1:1;
  signed char v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1c_BFs1s) C1{ Fs:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1c_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1c_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFu1c_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1c_BFs1s, BFs1s_BFs1c_BFu1c_BFs1s)
//============================================================================


struct  BFs1s_BFs1c_BFu1c_BFu1c  {
  signed short v1:1;
  signed char v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1c_BFu1c) C1{ Fs:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1c_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFu1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1c_BFu1c, BFs1s_BFs1c_BFu1c_BFu1c)
//============================================================================


struct  BFs1s_BFs1c_BFu1c_BFu1i  {
  signed short v1:1;
  signed char v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1c_BFu1i) C1{ Fs:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1c_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1c_BFu1i, BFs1s_BFs1c_BFu1c_BFu1i)
//============================================================================


struct  BFs1s_BFs1c_BFu1c_BFu1ll  {
  signed short v1:1;
  signed char v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1c_BFu1ll) C1{ Fs:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1c_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1c_BFu1ll, BFs1s_BFs1c_BFu1c_BFu1ll)
//============================================================================


struct  BFs1s_BFs1c_BFu1c_BFu1s  {
  signed short v1:1;
  signed char v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1c_BFu1s) C1{ Fs:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1c_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1c_BFu1s, BFs1s_BFs1c_BFu1c_BFu1s)
//============================================================================


struct  BFs1s_BFs1c_BFu1i  {
  signed short v1:1;
  signed char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1s_BFs1c_BFu1i) C1{ Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1i, BFs1s_BFs1c_BFu1i)
//============================================================================


struct  BFs1s_BFs1c_BFu1i_BFs1c  {
  signed short v1:1;
  signed char v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1i_BFs1c) C1{ Fs:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1c_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1i_BFs1c, BFs1s_BFs1c_BFu1i_BFs1c)
//============================================================================


struct  BFs1s_BFs1c_BFu1i_BFs1i  {
  signed short v1:1;
  signed char v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1i_BFs1i) C1{ Fs:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1c_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1i_BFs1i, BFs1s_BFs1c_BFu1i_BFs1i)
//============================================================================


struct  BFs1s_BFs1c_BFu1i_BFs1ll  {
  signed short v1:1;
  signed char v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1i_BFs1ll) C1{ Fs:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1c_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1i_BFs1ll, BFs1s_BFs1c_BFu1i_BFs1ll)
//============================================================================


struct  BFs1s_BFs1c_BFu1i_BFs1s  {
  signed short v1:1;
  signed char v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1i_BFs1s) C1{ Fs:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1c_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1i_BFs1s, BFs1s_BFs1c_BFu1i_BFs1s)
//============================================================================


struct  BFs1s_BFs1c_BFu1i_BFu1c  {
  signed short v1:1;
  signed char v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1i_BFu1c) C1{ Fs:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1c_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1i_BFu1c, BFs1s_BFs1c_BFu1i_BFu1c)
//============================================================================


struct  BFs1s_BFs1c_BFu1i_BFu1i  {
  signed short v1:1;
  signed char v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1i_BFu1i) C1{ Fs:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1c_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1i_BFu1i, BFs1s_BFs1c_BFu1i_BFu1i)
//============================================================================


struct  BFs1s_BFs1c_BFu1i_BFu1ll  {
  signed short v1:1;
  signed char v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1i_BFu1ll) C1{ Fs:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1c_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1i_BFu1ll, BFs1s_BFs1c_BFu1i_BFu1ll)
//============================================================================


struct  BFs1s_BFs1c_BFu1i_BFu1s  {
  signed short v1:1;
  signed char v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1i_BFu1s) C1{ Fs:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1c_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1i_BFu1s, BFs1s_BFs1c_BFu1i_BFu1s)
//============================================================================


struct  BFs1s_BFs1c_BFu1ll  {
  signed short v1:1;
  signed char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1s_BFs1c_BFu1ll) C1{ Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1ll, BFs1s_BFs1c_BFu1ll)
//============================================================================


struct  BFs1s_BFs1c_BFu1ll_BFs1c  {
  signed short v1:1;
  signed char v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1ll_BFs1c) C1{ Fs:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1c_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1ll_BFs1c, BFs1s_BFs1c_BFu1ll_BFs1c)
//============================================================================


struct  BFs1s_BFs1c_BFu1ll_BFs1i  {
  signed short v1:1;
  signed char v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1ll_BFs1i) C1{ Fs:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1c_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1ll_BFs1i, BFs1s_BFs1c_BFu1ll_BFs1i)
//============================================================================


struct  BFs1s_BFs1c_BFu1ll_BFs1ll  {
  signed short v1:1;
  signed char v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1ll_BFs1ll) C1{ Fs:1 Fc:1 FL:1 FL:1}



static void Test_BFs1s_BFs1c_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1ll_BFs1ll, BFs1s_BFs1c_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFs1c_BFu1ll_BFs1s  {
  signed short v1:1;
  signed char v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1ll_BFs1s) C1{ Fs:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1c_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1ll_BFs1s, BFs1s_BFs1c_BFu1ll_BFs1s)
//============================================================================


struct  BFs1s_BFs1c_BFu1ll_BFu1c  {
  signed short v1:1;
  signed char v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1ll_BFu1c) C1{ Fs:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1c_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1ll_BFu1c, BFs1s_BFs1c_BFu1ll_BFu1c)
//============================================================================


struct  BFs1s_BFs1c_BFu1ll_BFu1i  {
  signed short v1:1;
  signed char v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1ll_BFu1i) C1{ Fs:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1c_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1ll_BFu1i, BFs1s_BFs1c_BFu1ll_BFu1i)
//============================================================================


struct  BFs1s_BFs1c_BFu1ll_BFu1ll  {
  signed short v1:1;
  signed char v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1ll_BFu1ll) C1{ Fs:1 Fc:1 FL:1 FL:1}



static void Test_BFs1s_BFs1c_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1ll_BFu1ll, BFs1s_BFs1c_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFs1c_BFu1ll_BFu1s  {
  signed short v1:1;
  signed char v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1ll_BFu1s) C1{ Fs:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1c_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1ll_BFu1s, BFs1s_BFs1c_BFu1ll_BFu1s)
//============================================================================


struct  BFs1s_BFs1c_BFu1s  {
  signed short v1:1;
  signed char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1s_BFs1c_BFu1s) C1{ Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1s, BFs1s_BFs1c_BFu1s)
//============================================================================


struct  BFs1s_BFs1c_BFu1s_BFs1c  {
  signed short v1:1;
  signed char v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1s_BFs1c) C1{ Fs:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1c_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFu1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1s_BFs1c, BFs1s_BFs1c_BFu1s_BFs1c)
//============================================================================


struct  BFs1s_BFs1c_BFu1s_BFs1i  {
  signed short v1:1;
  signed char v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1s_BFs1i) C1{ Fs:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1c_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1s_BFs1i, BFs1s_BFs1c_BFu1s_BFs1i)
//============================================================================


struct  BFs1s_BFs1c_BFu1s_BFs1ll  {
  signed short v1:1;
  signed char v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1s_BFs1ll) C1{ Fs:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1c_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1s_BFs1ll, BFs1s_BFs1c_BFu1s_BFs1ll)
//============================================================================


struct  BFs1s_BFs1c_BFu1s_BFs1s  {
  signed short v1:1;
  signed char v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1s_BFs1s) C1{ Fs:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1c_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFu1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1c_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1s_BFs1s, BFs1s_BFs1c_BFu1s_BFs1s)
//============================================================================


struct  BFs1s_BFs1c_BFu1s_BFu1c  {
  signed short v1:1;
  signed char v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1s_BFu1c) C1{ Fs:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1c_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1s_BFu1c, BFs1s_BFs1c_BFu1s_BFu1c)
//============================================================================


struct  BFs1s_BFs1c_BFu1s_BFu1i  {
  signed short v1:1;
  signed char v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1s_BFu1i) C1{ Fs:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1c_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1c_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1c_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1s_BFu1i, BFs1s_BFs1c_BFu1s_BFu1i)
//============================================================================


struct  BFs1s_BFs1c_BFu1s_BFu1ll  {
  signed short v1:1;
  signed char v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1s_BFu1ll) C1{ Fs:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1c_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1c_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1c_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1s_BFu1ll, BFs1s_BFs1c_BFu1s_BFu1ll)
//============================================================================


struct  BFs1s_BFs1c_BFu1s_BFu1s  {
  signed short v1:1;
  signed char v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1c_BFu1s_BFu1s) C1{ Fs:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1c_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1c_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1c_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1c_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1c_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1c_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1c_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1c_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1c_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1c_BFu1s_BFu1s, BFs1s_BFs1c_BFu1s_BFu1s)
//============================================================================


struct  BFs1s_BFs1i  {
  signed short v1:1;
  signed int v2:1;
};
//SIG(1 BFs1s_BFs1i) C1{ Fs:1 Fi:1}



static void Test_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i, BFs1s_BFs1i)
//============================================================================


struct  BFs1s_BFs1i_BFs1c  {
  signed short v1:1;
  signed int v2:1;
  signed char v3:1;
};
//SIG(1 BFs1s_BFs1i_BFs1c) C1{ Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1c, BFs1s_BFs1i_BFs1c)
//============================================================================


struct  BFs1s_BFs1i_BFs1c_BFs1c  {
  signed short v1:1;
  signed int v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1c_BFs1c) C1{ Fs:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1i_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1c_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1c_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1c_BFs1c, BFs1s_BFs1i_BFs1c_BFs1c)
//============================================================================


struct  BFs1s_BFs1i_BFs1c_BFs1i  {
  signed short v1:1;
  signed int v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1c_BFs1i) C1{ Fs:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1i_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1c_BFs1i, BFs1s_BFs1i_BFs1c_BFs1i)
//============================================================================


struct  BFs1s_BFs1i_BFs1c_BFs1ll  {
  signed short v1:1;
  signed int v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1c_BFs1ll) C1{ Fs:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1i_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1c_BFs1ll, BFs1s_BFs1i_BFs1c_BFs1ll)
//============================================================================


struct  BFs1s_BFs1i_BFs1c_BFs1s  {
  signed short v1:1;
  signed int v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1c_BFs1s) C1{ Fs:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1i_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1c_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1c_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1c_BFs1s, BFs1s_BFs1i_BFs1c_BFs1s)
//============================================================================


struct  BFs1s_BFs1i_BFs1c_BFu1c  {
  signed short v1:1;
  signed int v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1c_BFu1c) C1{ Fs:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1i_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1c_BFu1c, BFs1s_BFs1i_BFs1c_BFu1c)
//============================================================================


struct  BFs1s_BFs1i_BFs1c_BFu1i  {
  signed short v1:1;
  signed int v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1c_BFu1i) C1{ Fs:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1i_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1c_BFu1i, BFs1s_BFs1i_BFs1c_BFu1i)
//============================================================================


struct  BFs1s_BFs1i_BFs1c_BFu1ll  {
  signed short v1:1;
  signed int v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1c_BFu1ll) C1{ Fs:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1i_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1c_BFu1ll, BFs1s_BFs1i_BFs1c_BFu1ll)
//============================================================================


struct  BFs1s_BFs1i_BFs1c_BFu1s  {
  signed short v1:1;
  signed int v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1c_BFu1s) C1{ Fs:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1i_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1c_BFu1s, BFs1s_BFs1i_BFs1c_BFu1s)
//============================================================================


struct  BFs1s_BFs1i_BFs1i  {
  signed short v1:1;
  signed int v2:1;
  signed int v3:1;
};
//SIG(1 BFs1s_BFs1i_BFs1i) C1{ Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1i, BFs1s_BFs1i_BFs1i)
//============================================================================


struct  BFs1s_BFs1i_BFs1i_BFs1c  {
  signed short v1:1;
  signed int v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1i_BFs1c) C1{ Fs:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1i_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1i_BFs1c, BFs1s_BFs1i_BFs1i_BFs1c)
//============================================================================


struct  BFs1s_BFs1i_BFs1i_BFs1i  {
  signed short v1:1;
  signed int v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1i_BFs1i) C1{ Fs:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1i_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1i_BFs1i, BFs1s_BFs1i_BFs1i_BFs1i)
//============================================================================


struct  BFs1s_BFs1i_BFs1i_BFs1ll  {
  signed short v1:1;
  signed int v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1i_BFs1ll) C1{ Fs:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1i_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1i_BFs1ll, BFs1s_BFs1i_BFs1i_BFs1ll)
//============================================================================


struct  BFs1s_BFs1i_BFs1i_BFs1s  {
  signed short v1:1;
  signed int v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1i_BFs1s) C1{ Fs:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1i_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1i_BFs1s, BFs1s_BFs1i_BFs1i_BFs1s)
//============================================================================


struct  BFs1s_BFs1i_BFs1i_BFu1c  {
  signed short v1:1;
  signed int v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1i_BFu1c) C1{ Fs:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1i_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1i_BFu1c, BFs1s_BFs1i_BFs1i_BFu1c)
//============================================================================


struct  BFs1s_BFs1i_BFs1i_BFu1i  {
  signed short v1:1;
  signed int v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1i_BFu1i) C1{ Fs:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1i_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1i_BFu1i, BFs1s_BFs1i_BFs1i_BFu1i)
//============================================================================


struct  BFs1s_BFs1i_BFs1i_BFu1ll  {
  signed short v1:1;
  signed int v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1i_BFu1ll) C1{ Fs:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1i_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1i_BFu1ll, BFs1s_BFs1i_BFs1i_BFu1ll)
//============================================================================


struct  BFs1s_BFs1i_BFs1i_BFu1s  {
  signed short v1:1;
  signed int v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1i_BFu1s) C1{ Fs:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1i_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1i_BFu1s, BFs1s_BFs1i_BFs1i_BFu1s)
//============================================================================


struct  BFs1s_BFs1i_BFs1ll  {
  signed short v1:1;
  signed int v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1s_BFs1i_BFs1ll) C1{ Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1ll, BFs1s_BFs1i_BFs1ll)
//============================================================================


struct  BFs1s_BFs1i_BFs1ll_BFs1c  {
  signed short v1:1;
  signed int v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1ll_BFs1c) C1{ Fs:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1i_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1ll_BFs1c, BFs1s_BFs1i_BFs1ll_BFs1c)
//============================================================================


struct  BFs1s_BFs1i_BFs1ll_BFs1i  {
  signed short v1:1;
  signed int v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1ll_BFs1i) C1{ Fs:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1i_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1ll_BFs1i, BFs1s_BFs1i_BFs1ll_BFs1i)
//============================================================================


struct  BFs1s_BFs1i_BFs1ll_BFs1ll  {
  signed short v1:1;
  signed int v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1ll_BFs1ll) C1{ Fs:1 Fi:1 FL:1 FL:1}



static void Test_BFs1s_BFs1i_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1ll_BFs1ll, BFs1s_BFs1i_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFs1i_BFs1ll_BFs1s  {
  signed short v1:1;
  signed int v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1ll_BFs1s) C1{ Fs:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1i_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1ll_BFs1s, BFs1s_BFs1i_BFs1ll_BFs1s)
//============================================================================


struct  BFs1s_BFs1i_BFs1ll_BFu1c  {
  signed short v1:1;
  signed int v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1ll_BFu1c) C1{ Fs:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1i_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1ll_BFu1c, BFs1s_BFs1i_BFs1ll_BFu1c)
//============================================================================


struct  BFs1s_BFs1i_BFs1ll_BFu1i  {
  signed short v1:1;
  signed int v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1ll_BFu1i) C1{ Fs:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1i_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1ll_BFu1i, BFs1s_BFs1i_BFs1ll_BFu1i)
//============================================================================


struct  BFs1s_BFs1i_BFs1ll_BFu1ll  {
  signed short v1:1;
  signed int v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1ll_BFu1ll) C1{ Fs:1 Fi:1 FL:1 FL:1}



static void Test_BFs1s_BFs1i_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1ll_BFu1ll, BFs1s_BFs1i_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFs1i_BFs1ll_BFu1s  {
  signed short v1:1;
  signed int v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1ll_BFu1s) C1{ Fs:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1i_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1ll_BFu1s, BFs1s_BFs1i_BFs1ll_BFu1s)
//============================================================================


struct  BFs1s_BFs1i_BFs1s  {
  signed short v1:1;
  signed int v2:1;
  signed short v3:1;
};
//SIG(1 BFs1s_BFs1i_BFs1s) C1{ Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1s, BFs1s_BFs1i_BFs1s)
//============================================================================


struct  BFs1s_BFs1i_BFs1s_BFs1c  {
  signed short v1:1;
  signed int v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1s_BFs1c) C1{ Fs:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1i_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1s_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1s_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1s_BFs1c, BFs1s_BFs1i_BFs1s_BFs1c)
//============================================================================


struct  BFs1s_BFs1i_BFs1s_BFs1i  {
  signed short v1:1;
  signed int v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1s_BFs1i) C1{ Fs:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1i_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1s_BFs1i, BFs1s_BFs1i_BFs1s_BFs1i)
//============================================================================


struct  BFs1s_BFs1i_BFs1s_BFs1ll  {
  signed short v1:1;
  signed int v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1s_BFs1ll) C1{ Fs:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1i_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1s_BFs1ll, BFs1s_BFs1i_BFs1s_BFs1ll)
//============================================================================


struct  BFs1s_BFs1i_BFs1s_BFs1s  {
  signed short v1:1;
  signed int v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1s_BFs1s) C1{ Fs:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1i_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1s_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1s_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1s_BFs1s, BFs1s_BFs1i_BFs1s_BFs1s)
//============================================================================


struct  BFs1s_BFs1i_BFs1s_BFu1c  {
  signed short v1:1;
  signed int v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1s_BFu1c) C1{ Fs:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1i_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1s_BFu1c, BFs1s_BFs1i_BFs1s_BFu1c)
//============================================================================


struct  BFs1s_BFs1i_BFs1s_BFu1i  {
  signed short v1:1;
  signed int v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1s_BFu1i) C1{ Fs:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1i_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1s_BFu1i, BFs1s_BFs1i_BFs1s_BFu1i)
//============================================================================


struct  BFs1s_BFs1i_BFs1s_BFu1ll  {
  signed short v1:1;
  signed int v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1s_BFu1ll) C1{ Fs:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1i_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1s_BFu1ll, BFs1s_BFs1i_BFs1s_BFu1ll)
//============================================================================


struct  BFs1s_BFs1i_BFs1s_BFu1s  {
  signed short v1:1;
  signed int v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFs1s_BFu1s) C1{ Fs:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1i_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFs1s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFs1s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1i_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFs1s_BFu1s, BFs1s_BFs1i_BFs1s_BFu1s)
//============================================================================


struct  BFs1s_BFs1i_BFu1c  {
  signed short v1:1;
  signed int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1s_BFs1i_BFu1c) C1{ Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1c, BFs1s_BFs1i_BFu1c)
//============================================================================


struct  BFs1s_BFs1i_BFu1c_BFs1c  {
  signed short v1:1;
  signed int v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1c_BFs1c) C1{ Fs:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1i_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1c_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1c_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1c_BFs1c, BFs1s_BFs1i_BFu1c_BFs1c)
//============================================================================


struct  BFs1s_BFs1i_BFu1c_BFs1i  {
  signed short v1:1;
  signed int v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1c_BFs1i) C1{ Fs:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1i_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1c_BFs1i, BFs1s_BFs1i_BFu1c_BFs1i)
//============================================================================


struct  BFs1s_BFs1i_BFu1c_BFs1ll  {
  signed short v1:1;
  signed int v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1c_BFs1ll) C1{ Fs:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1i_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1c_BFs1ll, BFs1s_BFs1i_BFu1c_BFs1ll)
//============================================================================


struct  BFs1s_BFs1i_BFu1c_BFs1s  {
  signed short v1:1;
  signed int v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1c_BFs1s) C1{ Fs:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1i_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1c_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1c_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1c_BFs1s, BFs1s_BFs1i_BFu1c_BFs1s)
//============================================================================


struct  BFs1s_BFs1i_BFu1c_BFu1c  {
  signed short v1:1;
  signed int v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1c_BFu1c) C1{ Fs:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1i_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1c_BFu1c, BFs1s_BFs1i_BFu1c_BFu1c)
//============================================================================


struct  BFs1s_BFs1i_BFu1c_BFu1i  {
  signed short v1:1;
  signed int v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1c_BFu1i) C1{ Fs:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1i_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1c_BFu1i, BFs1s_BFs1i_BFu1c_BFu1i)
//============================================================================


struct  BFs1s_BFs1i_BFu1c_BFu1ll  {
  signed short v1:1;
  signed int v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1c_BFu1ll) C1{ Fs:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1i_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1c_BFu1ll, BFs1s_BFs1i_BFu1c_BFu1ll)
//============================================================================


struct  BFs1s_BFs1i_BFu1c_BFu1s  {
  signed short v1:1;
  signed int v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1c_BFu1s) C1{ Fs:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1i_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1c_BFu1s, BFs1s_BFs1i_BFu1c_BFu1s)
//============================================================================


struct  BFs1s_BFs1i_BFu1i  {
  signed short v1:1;
  signed int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1s_BFs1i_BFu1i) C1{ Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1i, BFs1s_BFs1i_BFu1i)
//============================================================================


struct  BFs1s_BFs1i_BFu1i_BFs1c  {
  signed short v1:1;
  signed int v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1i_BFs1c) C1{ Fs:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1i_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1i_BFs1c, BFs1s_BFs1i_BFu1i_BFs1c)
//============================================================================


struct  BFs1s_BFs1i_BFu1i_BFs1i  {
  signed short v1:1;
  signed int v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1i_BFs1i) C1{ Fs:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1i_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1i_BFs1i, BFs1s_BFs1i_BFu1i_BFs1i)
//============================================================================


struct  BFs1s_BFs1i_BFu1i_BFs1ll  {
  signed short v1:1;
  signed int v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1i_BFs1ll) C1{ Fs:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1i_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1i_BFs1ll, BFs1s_BFs1i_BFu1i_BFs1ll)
//============================================================================


struct  BFs1s_BFs1i_BFu1i_BFs1s  {
  signed short v1:1;
  signed int v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1i_BFs1s) C1{ Fs:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1i_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1i_BFs1s, BFs1s_BFs1i_BFu1i_BFs1s)
//============================================================================


struct  BFs1s_BFs1i_BFu1i_BFu1c  {
  signed short v1:1;
  signed int v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1i_BFu1c) C1{ Fs:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1i_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1i_BFu1c, BFs1s_BFs1i_BFu1i_BFu1c)
//============================================================================


struct  BFs1s_BFs1i_BFu1i_BFu1i  {
  signed short v1:1;
  signed int v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1i_BFu1i) C1{ Fs:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1i_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1i_BFu1i, BFs1s_BFs1i_BFu1i_BFu1i)
//============================================================================


struct  BFs1s_BFs1i_BFu1i_BFu1ll  {
  signed short v1:1;
  signed int v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1i_BFu1ll) C1{ Fs:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1i_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1i_BFu1ll, BFs1s_BFs1i_BFu1i_BFu1ll)
//============================================================================


struct  BFs1s_BFs1i_BFu1i_BFu1s  {
  signed short v1:1;
  signed int v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1i_BFu1s) C1{ Fs:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1i_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1i_BFu1s, BFs1s_BFs1i_BFu1i_BFu1s)
//============================================================================


struct  BFs1s_BFs1i_BFu1ll  {
  signed short v1:1;
  signed int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1s_BFs1i_BFu1ll) C1{ Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1ll, BFs1s_BFs1i_BFu1ll)
//============================================================================


struct  BFs1s_BFs1i_BFu1ll_BFs1c  {
  signed short v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1ll_BFs1c) C1{ Fs:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1i_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1ll_BFs1c, BFs1s_BFs1i_BFu1ll_BFs1c)
//============================================================================


struct  BFs1s_BFs1i_BFu1ll_BFs1i  {
  signed short v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1ll_BFs1i) C1{ Fs:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1i_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1ll_BFs1i, BFs1s_BFs1i_BFu1ll_BFs1i)
//============================================================================


struct  BFs1s_BFs1i_BFu1ll_BFs1ll  {
  signed short v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1ll_BFs1ll) C1{ Fs:1 Fi:1 FL:1 FL:1}



static void Test_BFs1s_BFs1i_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1ll_BFs1ll, BFs1s_BFs1i_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFs1i_BFu1ll_BFs1s  {
  signed short v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1ll_BFs1s) C1{ Fs:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1i_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1ll_BFs1s, BFs1s_BFs1i_BFu1ll_BFs1s)
//============================================================================


struct  BFs1s_BFs1i_BFu1ll_BFu1c  {
  signed short v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1ll_BFu1c) C1{ Fs:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1i_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1ll_BFu1c, BFs1s_BFs1i_BFu1ll_BFu1c)
//============================================================================


struct  BFs1s_BFs1i_BFu1ll_BFu1i  {
  signed short v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1ll_BFu1i) C1{ Fs:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1i_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1ll_BFu1i, BFs1s_BFs1i_BFu1ll_BFu1i)
//============================================================================


struct  BFs1s_BFs1i_BFu1ll_BFu1ll  {
  signed short v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1ll_BFu1ll) C1{ Fs:1 Fi:1 FL:1 FL:1}



static void Test_BFs1s_BFs1i_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1ll_BFu1ll, BFs1s_BFs1i_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFs1i_BFu1ll_BFu1s  {
  signed short v1:1;
  signed int v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1ll_BFu1s) C1{ Fs:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1i_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1ll_BFu1s, BFs1s_BFs1i_BFu1ll_BFu1s)
//============================================================================


struct  BFs1s_BFs1i_BFu1s  {
  signed short v1:1;
  signed int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1s_BFs1i_BFu1s) C1{ Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1s, BFs1s_BFs1i_BFu1s)
//============================================================================


struct  BFs1s_BFs1i_BFu1s_BFs1c  {
  signed short v1:1;
  signed int v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1s_BFs1c) C1{ Fs:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1i_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1s_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1s_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1s_BFs1c, BFs1s_BFs1i_BFu1s_BFs1c)
//============================================================================


struct  BFs1s_BFs1i_BFu1s_BFs1i  {
  signed short v1:1;
  signed int v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1s_BFs1i) C1{ Fs:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1i_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1s_BFs1i, BFs1s_BFs1i_BFu1s_BFs1i)
//============================================================================


struct  BFs1s_BFs1i_BFu1s_BFs1ll  {
  signed short v1:1;
  signed int v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1s_BFs1ll) C1{ Fs:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1i_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1s_BFs1ll, BFs1s_BFs1i_BFu1s_BFs1ll)
//============================================================================


struct  BFs1s_BFs1i_BFu1s_BFs1s  {
  signed short v1:1;
  signed int v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1s_BFs1s) C1{ Fs:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1i_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1s_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1s_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1i_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1s_BFs1s, BFs1s_BFs1i_BFu1s_BFs1s)
//============================================================================


struct  BFs1s_BFs1i_BFu1s_BFu1c  {
  signed short v1:1;
  signed int v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1s_BFu1c) C1{ Fs:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1i_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1s_BFu1c, BFs1s_BFs1i_BFu1s_BFu1c)
//============================================================================


struct  BFs1s_BFs1i_BFu1s_BFu1i  {
  signed short v1:1;
  signed int v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1s_BFu1i) C1{ Fs:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1i_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1s_BFu1i, BFs1s_BFs1i_BFu1s_BFu1i)
//============================================================================


struct  BFs1s_BFs1i_BFu1s_BFu1ll  {
  signed short v1:1;
  signed int v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1s_BFu1ll) C1{ Fs:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1i_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1i_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1i_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1s_BFu1ll, BFs1s_BFs1i_BFu1s_BFu1ll)
//============================================================================


struct  BFs1s_BFs1i_BFu1s_BFu1s  {
  signed short v1:1;
  signed int v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1i_BFu1s_BFu1s) C1{ Fs:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1i_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1i_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1i_BFu1s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1i_BFu1s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1i_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1i_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1i_BFu1s_BFu1s, BFs1s_BFs1i_BFu1s_BFu1s)
//============================================================================


struct  BFs1s_BFs1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
};
//SIG(1 BFs1s_BFs1ll) C1{ Fs:1 FL:1}



static void Test_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll, BFs1s_BFs1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFs1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1c) C1{ Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1c, BFs1s_BFs1ll_BFs1c)
//============================================================================


struct  BFs1s_BFs1ll_BFs1c_BFs1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1c_BFs1c) C1{ Fs:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1c_BFs1c, BFs1s_BFs1ll_BFs1c_BFs1c)
//============================================================================


struct  BFs1s_BFs1ll_BFs1c_BFs1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1c_BFs1i) C1{ Fs:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1c_BFs1i, BFs1s_BFs1ll_BFs1c_BFs1i)
//============================================================================


struct  BFs1s_BFs1ll_BFs1c_BFs1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1c_BFs1ll) C1{ Fs:1 FL:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1ll_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1c_BFs1ll, BFs1s_BFs1ll_BFs1c_BFs1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFs1c_BFs1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1c_BFs1s) C1{ Fs:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1c_BFs1s, BFs1s_BFs1ll_BFs1c_BFs1s)
//============================================================================


struct  BFs1s_BFs1ll_BFs1c_BFu1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1c_BFu1c) C1{ Fs:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1c_BFu1c, BFs1s_BFs1ll_BFs1c_BFu1c)
//============================================================================


struct  BFs1s_BFs1ll_BFs1c_BFu1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1c_BFu1i) C1{ Fs:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1c_BFu1i, BFs1s_BFs1ll_BFs1c_BFu1i)
//============================================================================


struct  BFs1s_BFs1ll_BFs1c_BFu1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1c_BFu1ll) C1{ Fs:1 FL:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1ll_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1c_BFu1ll, BFs1s_BFs1ll_BFs1c_BFu1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFs1c_BFu1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1c_BFu1s) C1{ Fs:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1c_BFu1s, BFs1s_BFs1ll_BFs1c_BFu1s)
//============================================================================


struct  BFs1s_BFs1ll_BFs1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1i) C1{ Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1i, BFs1s_BFs1ll_BFs1i)
//============================================================================


struct  BFs1s_BFs1ll_BFs1i_BFs1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1i_BFs1c) C1{ Fs:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1i_BFs1c, BFs1s_BFs1ll_BFs1i_BFs1c)
//============================================================================


struct  BFs1s_BFs1ll_BFs1i_BFs1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1i_BFs1i) C1{ Fs:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1i_BFs1i, BFs1s_BFs1ll_BFs1i_BFs1i)
//============================================================================


struct  BFs1s_BFs1ll_BFs1i_BFs1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1i_BFs1ll) C1{ Fs:1 FL:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1ll_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1i_BFs1ll, BFs1s_BFs1ll_BFs1i_BFs1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFs1i_BFs1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1i_BFs1s) C1{ Fs:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1i_BFs1s, BFs1s_BFs1ll_BFs1i_BFs1s)
//============================================================================


struct  BFs1s_BFs1ll_BFs1i_BFu1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1i_BFu1c) C1{ Fs:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1i_BFu1c, BFs1s_BFs1ll_BFs1i_BFu1c)
//============================================================================


struct  BFs1s_BFs1ll_BFs1i_BFu1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1i_BFu1i) C1{ Fs:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1i_BFu1i, BFs1s_BFs1ll_BFs1i_BFu1i)
//============================================================================


struct  BFs1s_BFs1ll_BFs1i_BFu1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1i_BFu1ll) C1{ Fs:1 FL:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1ll_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1i_BFu1ll, BFs1s_BFs1ll_BFs1i_BFu1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFs1i_BFu1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1i_BFu1s) C1{ Fs:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1i_BFu1s, BFs1s_BFs1ll_BFs1i_BFu1s)
//============================================================================


struct  BFs1s_BFs1ll_BFs1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1ll) C1{ Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1ll, BFs1s_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFs1ll_BFs1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1ll_BFs1c) C1{ Fs:1 FL:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1ll_BFs1c, BFs1s_BFs1ll_BFs1ll_BFs1c)
//============================================================================


struct  BFs1s_BFs1ll_BFs1ll_BFs1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1ll_BFs1i) C1{ Fs:1 FL:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1ll_BFs1i, BFs1s_BFs1ll_BFs1ll_BFs1i)
//============================================================================


struct  BFs1s_BFs1ll_BFs1ll_BFs1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1ll_BFs1ll) C1{ Fs:1 FL:1 FL:1 FL:1}



static void Test_BFs1s_BFs1ll_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1ll_BFs1ll, BFs1s_BFs1ll_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFs1ll_BFs1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1ll_BFs1s) C1{ Fs:1 FL:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1ll_BFs1s, BFs1s_BFs1ll_BFs1ll_BFs1s)
//============================================================================


struct  BFs1s_BFs1ll_BFs1ll_BFu1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1ll_BFu1c) C1{ Fs:1 FL:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1ll_BFu1c, BFs1s_BFs1ll_BFs1ll_BFu1c)
//============================================================================


struct  BFs1s_BFs1ll_BFs1ll_BFu1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1ll_BFu1i) C1{ Fs:1 FL:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1ll_BFu1i, BFs1s_BFs1ll_BFs1ll_BFu1i)
//============================================================================


struct  BFs1s_BFs1ll_BFs1ll_BFu1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1ll_BFu1ll) C1{ Fs:1 FL:1 FL:1 FL:1}



static void Test_BFs1s_BFs1ll_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1ll_BFu1ll, BFs1s_BFs1ll_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFs1ll_BFu1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1ll_BFu1s) C1{ Fs:1 FL:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1ll_BFu1s, BFs1s_BFs1ll_BFs1ll_BFu1s)
//============================================================================


struct  BFs1s_BFs1ll_BFs1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1s) C1{ Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1s, BFs1s_BFs1ll_BFs1s)
//============================================================================


struct  BFs1s_BFs1ll_BFs1s_BFs1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1s_BFs1c) C1{ Fs:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1s_BFs1c, BFs1s_BFs1ll_BFs1s_BFs1c)
//============================================================================


struct  BFs1s_BFs1ll_BFs1s_BFs1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1s_BFs1i) C1{ Fs:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1s_BFs1i, BFs1s_BFs1ll_BFs1s_BFs1i)
//============================================================================


struct  BFs1s_BFs1ll_BFs1s_BFs1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1s_BFs1ll) C1{ Fs:1 FL:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1ll_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1s_BFs1ll, BFs1s_BFs1ll_BFs1s_BFs1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFs1s_BFs1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1s_BFs1s) C1{ Fs:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1s_BFs1s, BFs1s_BFs1ll_BFs1s_BFs1s)
//============================================================================


struct  BFs1s_BFs1ll_BFs1s_BFu1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1s_BFu1c) C1{ Fs:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1s_BFu1c, BFs1s_BFs1ll_BFs1s_BFu1c)
//============================================================================


struct  BFs1s_BFs1ll_BFs1s_BFu1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1s_BFu1i) C1{ Fs:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1s_BFu1i, BFs1s_BFs1ll_BFs1s_BFu1i)
//============================================================================


struct  BFs1s_BFs1ll_BFs1s_BFu1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1s_BFu1ll) C1{ Fs:1 FL:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1ll_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1s_BFu1ll, BFs1s_BFs1ll_BFs1s_BFu1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFs1s_BFu1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFs1s_BFu1s) C1{ Fs:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFs1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFs1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFs1s_BFu1s, BFs1s_BFs1ll_BFs1s_BFu1s)
//============================================================================


struct  BFs1s_BFs1ll_BFu1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1c) C1{ Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1c, BFs1s_BFs1ll_BFu1c)
//============================================================================


struct  BFs1s_BFs1ll_BFu1c_BFs1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1c_BFs1c) C1{ Fs:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1c_BFs1c, BFs1s_BFs1ll_BFu1c_BFs1c)
//============================================================================


struct  BFs1s_BFs1ll_BFu1c_BFs1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1c_BFs1i) C1{ Fs:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1c_BFs1i, BFs1s_BFs1ll_BFu1c_BFs1i)
//============================================================================


struct  BFs1s_BFs1ll_BFu1c_BFs1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1c_BFs1ll) C1{ Fs:1 FL:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1ll_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1c_BFs1ll, BFs1s_BFs1ll_BFu1c_BFs1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFu1c_BFs1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1c_BFs1s) C1{ Fs:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1c_BFs1s, BFs1s_BFs1ll_BFu1c_BFs1s)
//============================================================================


struct  BFs1s_BFs1ll_BFu1c_BFu1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1c_BFu1c) C1{ Fs:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1c_BFu1c, BFs1s_BFs1ll_BFu1c_BFu1c)
//============================================================================


struct  BFs1s_BFs1ll_BFu1c_BFu1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1c_BFu1i) C1{ Fs:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1c_BFu1i, BFs1s_BFs1ll_BFu1c_BFu1i)
//============================================================================


struct  BFs1s_BFs1ll_BFu1c_BFu1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1c_BFu1ll) C1{ Fs:1 FL:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1ll_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1c_BFu1ll, BFs1s_BFs1ll_BFu1c_BFu1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFu1c_BFu1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1c_BFu1s) C1{ Fs:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1c_BFu1s, BFs1s_BFs1ll_BFu1c_BFu1s)
//============================================================================


struct  BFs1s_BFs1ll_BFu1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1i) C1{ Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1i, BFs1s_BFs1ll_BFu1i)
//============================================================================


struct  BFs1s_BFs1ll_BFu1i_BFs1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1i_BFs1c) C1{ Fs:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1i_BFs1c, BFs1s_BFs1ll_BFu1i_BFs1c)
//============================================================================


struct  BFs1s_BFs1ll_BFu1i_BFs1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1i_BFs1i) C1{ Fs:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1i_BFs1i, BFs1s_BFs1ll_BFu1i_BFs1i)
//============================================================================


struct  BFs1s_BFs1ll_BFu1i_BFs1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1i_BFs1ll) C1{ Fs:1 FL:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1ll_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1i_BFs1ll, BFs1s_BFs1ll_BFu1i_BFs1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFu1i_BFs1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1i_BFs1s) C1{ Fs:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1i_BFs1s, BFs1s_BFs1ll_BFu1i_BFs1s)
//============================================================================


struct  BFs1s_BFs1ll_BFu1i_BFu1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1i_BFu1c) C1{ Fs:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1i_BFu1c, BFs1s_BFs1ll_BFu1i_BFu1c)
//============================================================================


struct  BFs1s_BFs1ll_BFu1i_BFu1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1i_BFu1i) C1{ Fs:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1i_BFu1i, BFs1s_BFs1ll_BFu1i_BFu1i)
//============================================================================


struct  BFs1s_BFs1ll_BFu1i_BFu1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1i_BFu1ll) C1{ Fs:1 FL:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1ll_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1i_BFu1ll, BFs1s_BFs1ll_BFu1i_BFu1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFu1i_BFu1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1i_BFu1s) C1{ Fs:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1i_BFu1s, BFs1s_BFs1ll_BFu1i_BFu1s)
//============================================================================


struct  BFs1s_BFs1ll_BFu1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1ll) C1{ Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1ll, BFs1s_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFu1ll_BFs1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1ll_BFs1c) C1{ Fs:1 FL:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1ll_BFs1c, BFs1s_BFs1ll_BFu1ll_BFs1c)
//============================================================================


struct  BFs1s_BFs1ll_BFu1ll_BFs1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1ll_BFs1i) C1{ Fs:1 FL:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1ll_BFs1i, BFs1s_BFs1ll_BFu1ll_BFs1i)
//============================================================================


struct  BFs1s_BFs1ll_BFu1ll_BFs1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1ll_BFs1ll) C1{ Fs:1 FL:1 FL:1 FL:1}



static void Test_BFs1s_BFs1ll_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1ll_BFs1ll, BFs1s_BFs1ll_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFu1ll_BFs1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1ll_BFs1s) C1{ Fs:1 FL:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1ll_BFs1s, BFs1s_BFs1ll_BFu1ll_BFs1s)
//============================================================================


struct  BFs1s_BFs1ll_BFu1ll_BFu1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1ll_BFu1c) C1{ Fs:1 FL:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1ll_BFu1c, BFs1s_BFs1ll_BFu1ll_BFu1c)
//============================================================================


struct  BFs1s_BFs1ll_BFu1ll_BFu1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1ll_BFu1i) C1{ Fs:1 FL:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1ll_BFu1i, BFs1s_BFs1ll_BFu1ll_BFu1i)
//============================================================================


struct  BFs1s_BFs1ll_BFu1ll_BFu1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1ll_BFu1ll) C1{ Fs:1 FL:1 FL:1 FL:1}



static void Test_BFs1s_BFs1ll_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1ll_BFu1ll, BFs1s_BFs1ll_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFu1ll_BFu1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1ll_BFu1s) C1{ Fs:1 FL:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1ll_BFu1s, BFs1s_BFs1ll_BFu1ll_BFu1s)
//============================================================================


struct  BFs1s_BFs1ll_BFu1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1s) C1{ Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1s, BFs1s_BFs1ll_BFu1s)
//============================================================================


struct  BFs1s_BFs1ll_BFu1s_BFs1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1s_BFs1c) C1{ Fs:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1s_BFs1c, BFs1s_BFs1ll_BFu1s_BFs1c)
//============================================================================


struct  BFs1s_BFs1ll_BFu1s_BFs1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1s_BFs1i) C1{ Fs:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1s_BFs1i, BFs1s_BFs1ll_BFu1s_BFs1i)
//============================================================================


struct  BFs1s_BFs1ll_BFu1s_BFs1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1s_BFs1ll) C1{ Fs:1 FL:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1ll_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1s_BFs1ll, BFs1s_BFs1ll_BFu1s_BFs1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFu1s_BFs1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1s_BFs1s) C1{ Fs:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1ll_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1s_BFs1s, BFs1s_BFs1ll_BFu1s_BFs1s)
//============================================================================


struct  BFs1s_BFs1ll_BFu1s_BFu1c  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1s_BFu1c) C1{ Fs:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1ll_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1s_BFu1c, BFs1s_BFs1ll_BFu1s_BFu1c)
//============================================================================


struct  BFs1s_BFs1ll_BFu1s_BFu1i  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1s_BFu1i) C1{ Fs:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1ll_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1s_BFu1i, BFs1s_BFs1ll_BFu1s_BFu1i)
//============================================================================


struct  BFs1s_BFs1ll_BFu1s_BFu1ll  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1s_BFu1ll) C1{ Fs:1 FL:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1ll_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1s_BFu1ll, BFs1s_BFs1ll_BFu1s_BFu1ll)
//============================================================================


struct  BFs1s_BFs1ll_BFu1s_BFu1s  {
  signed short v1:1;
  signed __tsi64 v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1ll_BFu1s_BFu1s) C1{ Fs:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1ll_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1ll_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1ll_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1ll_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1ll_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1ll_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1ll_BFu1s_BFu1s, BFs1s_BFs1ll_BFu1s_BFu1s)
//============================================================================


struct  BFs1s_BFs1s  {
  signed short v1:1;
  signed short v2:1;
};
//SIG(1 BFs1s_BFs1s) C1{ Fs:1 Fs:1}



static void Test_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s, BFs1s_BFs1s)
//============================================================================


struct  BFs1s_BFs1s_BFs1c  {
  signed short v1:1;
  signed short v2:1;
  signed char v3:1;
};
//SIG(1 BFs1s_BFs1s_BFs1c) C1{ Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1c, BFs1s_BFs1s_BFs1c)
//============================================================================


struct  BFs1s_BFs1s_BFs1c_BFs1c  {
  signed short v1:1;
  signed short v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1c_BFs1c) C1{ Fs:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1s_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1c_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFs1c_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1c_BFs1c, BFs1s_BFs1s_BFs1c_BFs1c)
//============================================================================


struct  BFs1s_BFs1s_BFs1c_BFs1i  {
  signed short v1:1;
  signed short v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1c_BFs1i) C1{ Fs:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1s_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1c_BFs1i, BFs1s_BFs1s_BFs1c_BFs1i)
//============================================================================


struct  BFs1s_BFs1s_BFs1c_BFs1ll  {
  signed short v1:1;
  signed short v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1c_BFs1ll) C1{ Fs:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1s_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1c_BFs1ll, BFs1s_BFs1s_BFs1c_BFs1ll)
//============================================================================


struct  BFs1s_BFs1s_BFs1c_BFs1s  {
  signed short v1:1;
  signed short v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1c_BFs1s) C1{ Fs:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1s_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1c_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFs1c_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1c_BFs1s, BFs1s_BFs1s_BFs1c_BFs1s)
//============================================================================


struct  BFs1s_BFs1s_BFs1c_BFu1c  {
  signed short v1:1;
  signed short v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1c_BFu1c) C1{ Fs:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1s_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFs1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1c_BFu1c, BFs1s_BFs1s_BFs1c_BFu1c)
//============================================================================


struct  BFs1s_BFs1s_BFs1c_BFu1i  {
  signed short v1:1;
  signed short v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1c_BFu1i) C1{ Fs:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1s_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1c_BFu1i, BFs1s_BFs1s_BFs1c_BFu1i)
//============================================================================


struct  BFs1s_BFs1s_BFs1c_BFu1ll  {
  signed short v1:1;
  signed short v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1c_BFu1ll) C1{ Fs:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1s_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1c_BFu1ll, BFs1s_BFs1s_BFs1c_BFu1ll)
//============================================================================


struct  BFs1s_BFs1s_BFs1c_BFu1s  {
  signed short v1:1;
  signed short v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1c_BFu1s) C1{ Fs:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1s_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFs1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1c_BFu1s, BFs1s_BFs1s_BFs1c_BFu1s)
//============================================================================


struct  BFs1s_BFs1s_BFs1i  {
  signed short v1:1;
  signed short v2:1;
  signed int v3:1;
};
//SIG(1 BFs1s_BFs1s_BFs1i) C1{ Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1i, BFs1s_BFs1s_BFs1i)
//============================================================================


struct  BFs1s_BFs1s_BFs1i_BFs1c  {
  signed short v1:1;
  signed short v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1i_BFs1c) C1{ Fs:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1s_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1i_BFs1c, BFs1s_BFs1s_BFs1i_BFs1c)
//============================================================================


struct  BFs1s_BFs1s_BFs1i_BFs1i  {
  signed short v1:1;
  signed short v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1i_BFs1i) C1{ Fs:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1s_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1i_BFs1i, BFs1s_BFs1s_BFs1i_BFs1i)
//============================================================================


struct  BFs1s_BFs1s_BFs1i_BFs1ll  {
  signed short v1:1;
  signed short v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1i_BFs1ll) C1{ Fs:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1s_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1i_BFs1ll, BFs1s_BFs1s_BFs1i_BFs1ll)
//============================================================================


struct  BFs1s_BFs1s_BFs1i_BFs1s  {
  signed short v1:1;
  signed short v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1i_BFs1s) C1{ Fs:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1s_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1i_BFs1s, BFs1s_BFs1s_BFs1i_BFs1s)
//============================================================================


struct  BFs1s_BFs1s_BFs1i_BFu1c  {
  signed short v1:1;
  signed short v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1i_BFu1c) C1{ Fs:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1s_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1i_BFu1c, BFs1s_BFs1s_BFs1i_BFu1c)
//============================================================================


struct  BFs1s_BFs1s_BFs1i_BFu1i  {
  signed short v1:1;
  signed short v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1i_BFu1i) C1{ Fs:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1s_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1i_BFu1i, BFs1s_BFs1s_BFs1i_BFu1i)
//============================================================================


struct  BFs1s_BFs1s_BFs1i_BFu1ll  {
  signed short v1:1;
  signed short v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1i_BFu1ll) C1{ Fs:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1s_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1i_BFu1ll, BFs1s_BFs1s_BFs1i_BFu1ll)
//============================================================================


struct  BFs1s_BFs1s_BFs1i_BFu1s  {
  signed short v1:1;
  signed short v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1i_BFu1s) C1{ Fs:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1s_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1i_BFu1s, BFs1s_BFs1s_BFs1i_BFu1s)
//============================================================================


struct  BFs1s_BFs1s_BFs1ll  {
  signed short v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1s_BFs1s_BFs1ll) C1{ Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1ll, BFs1s_BFs1s_BFs1ll)
//============================================================================


struct  BFs1s_BFs1s_BFs1ll_BFs1c  {
  signed short v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1ll_BFs1c) C1{ Fs:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1s_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1ll_BFs1c, BFs1s_BFs1s_BFs1ll_BFs1c)
//============================================================================


struct  BFs1s_BFs1s_BFs1ll_BFs1i  {
  signed short v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1ll_BFs1i) C1{ Fs:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1s_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1ll_BFs1i, BFs1s_BFs1s_BFs1ll_BFs1i)
//============================================================================


struct  BFs1s_BFs1s_BFs1ll_BFs1ll  {
  signed short v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1ll_BFs1ll) C1{ Fs:1 Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFs1s_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1ll_BFs1ll, BFs1s_BFs1s_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFs1s_BFs1ll_BFs1s  {
  signed short v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1ll_BFs1s) C1{ Fs:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1s_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1ll_BFs1s, BFs1s_BFs1s_BFs1ll_BFs1s)
//============================================================================


struct  BFs1s_BFs1s_BFs1ll_BFu1c  {
  signed short v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1ll_BFu1c) C1{ Fs:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1s_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1ll_BFu1c, BFs1s_BFs1s_BFs1ll_BFu1c)
//============================================================================


struct  BFs1s_BFs1s_BFs1ll_BFu1i  {
  signed short v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1ll_BFu1i) C1{ Fs:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1s_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1ll_BFu1i, BFs1s_BFs1s_BFs1ll_BFu1i)
//============================================================================


struct  BFs1s_BFs1s_BFs1ll_BFu1ll  {
  signed short v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1ll_BFu1ll) C1{ Fs:1 Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFs1s_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1ll_BFu1ll, BFs1s_BFs1s_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFs1s_BFs1ll_BFu1s  {
  signed short v1:1;
  signed short v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1ll_BFu1s) C1{ Fs:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1s_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1ll_BFu1s, BFs1s_BFs1s_BFs1ll_BFu1s)
//============================================================================


struct  BFs1s_BFs1s_BFs1s  {
  signed short v1:1;
  signed short v2:1;
  signed short v3:1;
};
//SIG(1 BFs1s_BFs1s_BFs1s) C1{ Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1s, BFs1s_BFs1s_BFs1s)
//============================================================================


struct  BFs1s_BFs1s_BFs1s_BFs1c  {
  signed short v1:1;
  signed short v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1s_BFs1c) C1{ Fs:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1s_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFs1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1s_BFs1c, BFs1s_BFs1s_BFs1s_BFs1c)
//============================================================================


struct  BFs1s_BFs1s_BFs1s_BFs1i  {
  signed short v1:1;
  signed short v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1s_BFs1i) C1{ Fs:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1s_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1s_BFs1i, BFs1s_BFs1s_BFs1s_BFs1i)
//============================================================================


struct  BFs1s_BFs1s_BFs1s_BFs1ll  {
  signed short v1:1;
  signed short v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1s_BFs1ll) C1{ Fs:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1s_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1s_BFs1ll, BFs1s_BFs1s_BFs1s_BFs1ll)
//============================================================================


struct  BFs1s_BFs1s_BFs1s_BFs1s  {
  signed short v1:1;
  signed short v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1s_BFs1s) C1{ Fs:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1s_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFs1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1s_BFs1s, BFs1s_BFs1s_BFs1s_BFs1s)
//============================================================================


struct  BFs1s_BFs1s_BFs1s_BFu1c  {
  signed short v1:1;
  signed short v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1s_BFu1c) C1{ Fs:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1s_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFs1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1s_BFu1c, BFs1s_BFs1s_BFs1s_BFu1c)
//============================================================================


struct  BFs1s_BFs1s_BFs1s_BFu1i  {
  signed short v1:1;
  signed short v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1s_BFu1i) C1{ Fs:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1s_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFs1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1s_BFu1i, BFs1s_BFs1s_BFs1s_BFu1i)
//============================================================================


struct  BFs1s_BFs1s_BFs1s_BFu1ll  {
  signed short v1:1;
  signed short v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1s_BFu1ll) C1{ Fs:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1s_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1s_BFu1ll, BFs1s_BFs1s_BFs1s_BFu1ll)
//============================================================================


struct  BFs1s_BFs1s_BFs1s_BFu1s  {
  signed short v1:1;
  signed short v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFs1s_BFu1s) C1{ Fs:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1s_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFs1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFs1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFs1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFs1s_BFu1s, BFs1s_BFs1s_BFs1s_BFu1s)
//============================================================================


struct  BFs1s_BFs1s_BFu1c  {
  signed short v1:1;
  signed short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1s_BFs1s_BFu1c) C1{ Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1c, BFs1s_BFs1s_BFu1c)
//============================================================================


struct  BFs1s_BFs1s_BFu1c_BFs1c  {
  signed short v1:1;
  signed short v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1c_BFs1c) C1{ Fs:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1s_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1c_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFu1c_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1c_BFs1c, BFs1s_BFs1s_BFu1c_BFs1c)
//============================================================================


struct  BFs1s_BFs1s_BFu1c_BFs1i  {
  signed short v1:1;
  signed short v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1c_BFs1i) C1{ Fs:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1s_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1c_BFs1i, BFs1s_BFs1s_BFu1c_BFs1i)
//============================================================================


struct  BFs1s_BFs1s_BFu1c_BFs1ll  {
  signed short v1:1;
  signed short v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1c_BFs1ll) C1{ Fs:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1s_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1c_BFs1ll, BFs1s_BFs1s_BFu1c_BFs1ll)
//============================================================================


struct  BFs1s_BFs1s_BFu1c_BFs1s  {
  signed short v1:1;
  signed short v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1c_BFs1s) C1{ Fs:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1s_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1c_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFu1c_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1c_BFs1s, BFs1s_BFs1s_BFu1c_BFs1s)
//============================================================================


struct  BFs1s_BFs1s_BFu1c_BFu1c  {
  signed short v1:1;
  signed short v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1c_BFu1c) C1{ Fs:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFs1s_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFu1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1c_BFu1c, BFs1s_BFs1s_BFu1c_BFu1c)
//============================================================================


struct  BFs1s_BFs1s_BFu1c_BFu1i  {
  signed short v1:1;
  signed short v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1c_BFu1i) C1{ Fs:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFs1s_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1c_BFu1i, BFs1s_BFs1s_BFu1c_BFu1i)
//============================================================================


struct  BFs1s_BFs1s_BFu1c_BFu1ll  {
  signed short v1:1;
  signed short v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1c_BFu1ll) C1{ Fs:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFs1s_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1c_BFu1ll, BFs1s_BFs1s_BFu1c_BFu1ll)
//============================================================================


struct  BFs1s_BFs1s_BFu1c_BFu1s  {
  signed short v1:1;
  signed short v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1c_BFu1s) C1{ Fs:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFs1s_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1c_BFu1s, BFs1s_BFs1s_BFu1c_BFu1s)
//============================================================================


struct  BFs1s_BFs1s_BFu1i  {
  signed short v1:1;
  signed short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1s_BFs1s_BFu1i) C1{ Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1i, BFs1s_BFs1s_BFu1i)
//============================================================================


struct  BFs1s_BFs1s_BFu1i_BFs1c  {
  signed short v1:1;
  signed short v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1i_BFs1c) C1{ Fs:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1s_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1i_BFs1c, BFs1s_BFs1s_BFu1i_BFs1c)
//============================================================================


struct  BFs1s_BFs1s_BFu1i_BFs1i  {
  signed short v1:1;
  signed short v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1i_BFs1i) C1{ Fs:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1s_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1i_BFs1i, BFs1s_BFs1s_BFu1i_BFs1i)
//============================================================================


struct  BFs1s_BFs1s_BFu1i_BFs1ll  {
  signed short v1:1;
  signed short v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1i_BFs1ll) C1{ Fs:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1s_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1i_BFs1ll, BFs1s_BFs1s_BFu1i_BFs1ll)
//============================================================================


struct  BFs1s_BFs1s_BFu1i_BFs1s  {
  signed short v1:1;
  signed short v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1i_BFs1s) C1{ Fs:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1s_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1i_BFs1s, BFs1s_BFs1s_BFu1i_BFs1s)
//============================================================================


struct  BFs1s_BFs1s_BFu1i_BFu1c  {
  signed short v1:1;
  signed short v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1i_BFu1c) C1{ Fs:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFs1s_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1i_BFu1c, BFs1s_BFs1s_BFu1i_BFu1c)
//============================================================================


struct  BFs1s_BFs1s_BFu1i_BFu1i  {
  signed short v1:1;
  signed short v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1i_BFu1i) C1{ Fs:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFs1s_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1i_BFu1i, BFs1s_BFs1s_BFu1i_BFu1i)
//============================================================================


struct  BFs1s_BFs1s_BFu1i_BFu1ll  {
  signed short v1:1;
  signed short v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1i_BFu1ll) C1{ Fs:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFs1s_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1i_BFu1ll, BFs1s_BFs1s_BFu1i_BFu1ll)
//============================================================================


struct  BFs1s_BFs1s_BFu1i_BFu1s  {
  signed short v1:1;
  signed short v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1i_BFu1s) C1{ Fs:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFs1s_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1i_BFu1s, BFs1s_BFs1s_BFu1i_BFu1s)
//============================================================================


struct  BFs1s_BFs1s_BFu1ll  {
  signed short v1:1;
  signed short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1s_BFs1s_BFu1ll) C1{ Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1ll, BFs1s_BFs1s_BFu1ll)
//============================================================================


struct  BFs1s_BFs1s_BFu1ll_BFs1c  {
  signed short v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1ll_BFs1c) C1{ Fs:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1s_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1ll_BFs1c, BFs1s_BFs1s_BFu1ll_BFs1c)
//============================================================================


struct  BFs1s_BFs1s_BFu1ll_BFs1i  {
  signed short v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1ll_BFs1i) C1{ Fs:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1s_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1ll_BFs1i, BFs1s_BFs1s_BFu1ll_BFs1i)
//============================================================================


struct  BFs1s_BFs1s_BFu1ll_BFs1ll  {
  signed short v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1ll_BFs1ll) C1{ Fs:1 Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFs1s_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1ll_BFs1ll, BFs1s_BFs1s_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFs1s_BFu1ll_BFs1s  {
  signed short v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1ll_BFs1s) C1{ Fs:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1s_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1ll_BFs1s, BFs1s_BFs1s_BFu1ll_BFs1s)
//============================================================================


struct  BFs1s_BFs1s_BFu1ll_BFu1c  {
  signed short v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1ll_BFu1c) C1{ Fs:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFs1s_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1ll_BFu1c, BFs1s_BFs1s_BFu1ll_BFu1c)
//============================================================================


struct  BFs1s_BFs1s_BFu1ll_BFu1i  {
  signed short v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1ll_BFu1i) C1{ Fs:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFs1s_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1ll_BFu1i, BFs1s_BFs1s_BFu1ll_BFu1i)
//============================================================================


struct  BFs1s_BFs1s_BFu1ll_BFu1ll  {
  signed short v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1ll_BFu1ll) C1{ Fs:1 Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFs1s_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1ll_BFu1ll, BFs1s_BFs1s_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFs1s_BFu1ll_BFu1s  {
  signed short v1:1;
  signed short v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1ll_BFu1s) C1{ Fs:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFs1s_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1ll_BFu1s, BFs1s_BFs1s_BFu1ll_BFu1s)
//============================================================================


struct  BFs1s_BFs1s_BFu1s  {
  signed short v1:1;
  signed short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1s_BFs1s_BFu1s) C1{ Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1s, BFs1s_BFs1s_BFu1s)
//============================================================================


struct  BFs1s_BFs1s_BFu1s_BFs1c  {
  signed short v1:1;
  signed short v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1s_BFs1c) C1{ Fs:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1s_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFu1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1s_BFs1c, BFs1s_BFs1s_BFu1s_BFs1c)
//============================================================================


struct  BFs1s_BFs1s_BFu1s_BFs1i  {
  signed short v1:1;
  signed short v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1s_BFs1i) C1{ Fs:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1s_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1s_BFs1i, BFs1s_BFs1s_BFu1s_BFs1i)
//============================================================================


struct  BFs1s_BFs1s_BFu1s_BFs1ll  {
  signed short v1:1;
  signed short v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1s_BFs1ll) C1{ Fs:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1s_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1s_BFs1ll, BFs1s_BFs1s_BFu1s_BFs1ll)
//============================================================================


struct  BFs1s_BFs1s_BFu1s_BFs1s  {
  signed short v1:1;
  signed short v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1s_BFs1s) C1{ Fs:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1s_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFu1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFs1s_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1s_BFs1s, BFs1s_BFs1s_BFu1s_BFs1s)
//============================================================================


struct  BFs1s_BFs1s_BFu1s_BFu1c  {
  signed short v1:1;
  signed short v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1s_BFu1c) C1{ Fs:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFs1s_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1s_BFu1c, BFs1s_BFs1s_BFu1s_BFu1c)
//============================================================================


struct  BFs1s_BFs1s_BFu1s_BFu1i  {
  signed short v1:1;
  signed short v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1s_BFu1i) C1{ Fs:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFs1s_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFs1s_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFs1s_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1s_BFu1i, BFs1s_BFs1s_BFu1s_BFu1i)
//============================================================================


struct  BFs1s_BFs1s_BFu1s_BFu1ll  {
  signed short v1:1;
  signed short v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1s_BFu1ll) C1{ Fs:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFs1s_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFs1s_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFs1s_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1s_BFu1ll, BFs1s_BFs1s_BFu1s_BFu1ll)
//============================================================================


struct  BFs1s_BFs1s_BFu1s_BFu1s  {
  signed short v1:1;
  signed short v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFs1s_BFu1s_BFu1s) C1{ Fs:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFs1s_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFs1s_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFs1s_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFs1s_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFs1s_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFs1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, -1, "BFs1s_BFs1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFs1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFs1s_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFs1s_BFu1s_BFu1s, BFs1s_BFs1s_BFu1s_BFu1s)
//============================================================================


struct  BFs1s_BFu1c  {
  signed short v1:1;
  unsigned char v2:1;
};
//SIG(1 BFs1s_BFu1c) C1{ Fs:1 Fc:1}



static void Test_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c, BFs1s_BFu1c)
//============================================================================


struct  BFs1s_BFu1c_BFs1c  {
  signed short v1:1;
  unsigned char v2:1;
  signed char v3:1;
};
//SIG(1 BFs1s_BFu1c_BFs1c) C1{ Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1c, BFs1s_BFu1c_BFs1c)
//============================================================================


struct  BFs1s_BFu1c_BFs1c_BFs1c  {
  signed short v1:1;
  unsigned char v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1c_BFs1c) C1{ Fs:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1c_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1c_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFs1c_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1c_BFs1c, BFs1s_BFu1c_BFs1c_BFs1c)
//============================================================================


struct  BFs1s_BFu1c_BFs1c_BFs1i  {
  signed short v1:1;
  unsigned char v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1c_BFs1i) C1{ Fs:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1c_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1c_BFs1i, BFs1s_BFu1c_BFs1c_BFs1i)
//============================================================================


struct  BFs1s_BFu1c_BFs1c_BFs1ll  {
  signed short v1:1;
  unsigned char v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1c_BFs1ll) C1{ Fs:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1c_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1c_BFs1ll, BFs1s_BFu1c_BFs1c_BFs1ll)
//============================================================================


struct  BFs1s_BFu1c_BFs1c_BFs1s  {
  signed short v1:1;
  unsigned char v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1c_BFs1s) C1{ Fs:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1c_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1c_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFs1c_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1c_BFs1s, BFs1s_BFu1c_BFs1c_BFs1s)
//============================================================================


struct  BFs1s_BFu1c_BFs1c_BFu1c  {
  signed short v1:1;
  unsigned char v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1c_BFu1c) C1{ Fs:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1c_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFs1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1c_BFu1c, BFs1s_BFu1c_BFs1c_BFu1c)
//============================================================================


struct  BFs1s_BFu1c_BFs1c_BFu1i  {
  signed short v1:1;
  unsigned char v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1c_BFu1i) C1{ Fs:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1c_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1c_BFu1i, BFs1s_BFu1c_BFs1c_BFu1i)
//============================================================================


struct  BFs1s_BFu1c_BFs1c_BFu1ll  {
  signed short v1:1;
  unsigned char v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1c_BFu1ll) C1{ Fs:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1c_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1c_BFu1ll, BFs1s_BFu1c_BFs1c_BFu1ll)
//============================================================================


struct  BFs1s_BFu1c_BFs1c_BFu1s  {
  signed short v1:1;
  unsigned char v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1c_BFu1s) C1{ Fs:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1c_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFs1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1c_BFu1s, BFs1s_BFu1c_BFs1c_BFu1s)
//============================================================================


struct  BFs1s_BFu1c_BFs1i  {
  signed short v1:1;
  unsigned char v2:1;
  signed int v3:1;
};
//SIG(1 BFs1s_BFu1c_BFs1i) C1{ Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1i, BFs1s_BFu1c_BFs1i)
//============================================================================


struct  BFs1s_BFu1c_BFs1i_BFs1c  {
  signed short v1:1;
  unsigned char v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1i_BFs1c) C1{ Fs:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1c_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1i_BFs1c, BFs1s_BFu1c_BFs1i_BFs1c)
//============================================================================


struct  BFs1s_BFu1c_BFs1i_BFs1i  {
  signed short v1:1;
  unsigned char v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1i_BFs1i) C1{ Fs:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1c_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1i_BFs1i, BFs1s_BFu1c_BFs1i_BFs1i)
//============================================================================


struct  BFs1s_BFu1c_BFs1i_BFs1ll  {
  signed short v1:1;
  unsigned char v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1i_BFs1ll) C1{ Fs:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1c_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1i_BFs1ll, BFs1s_BFu1c_BFs1i_BFs1ll)
//============================================================================


struct  BFs1s_BFu1c_BFs1i_BFs1s  {
  signed short v1:1;
  unsigned char v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1i_BFs1s) C1{ Fs:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1c_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1i_BFs1s, BFs1s_BFu1c_BFs1i_BFs1s)
//============================================================================


struct  BFs1s_BFu1c_BFs1i_BFu1c  {
  signed short v1:1;
  unsigned char v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1i_BFu1c) C1{ Fs:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1c_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1i_BFu1c, BFs1s_BFu1c_BFs1i_BFu1c)
//============================================================================


struct  BFs1s_BFu1c_BFs1i_BFu1i  {
  signed short v1:1;
  unsigned char v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1i_BFu1i) C1{ Fs:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1c_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1i_BFu1i, BFs1s_BFu1c_BFs1i_BFu1i)
//============================================================================


struct  BFs1s_BFu1c_BFs1i_BFu1ll  {
  signed short v1:1;
  unsigned char v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1i_BFu1ll) C1{ Fs:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1c_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1i_BFu1ll, BFs1s_BFu1c_BFs1i_BFu1ll)
//============================================================================


struct  BFs1s_BFu1c_BFs1i_BFu1s  {
  signed short v1:1;
  unsigned char v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1i_BFu1s) C1{ Fs:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1c_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1i_BFu1s, BFs1s_BFu1c_BFs1i_BFu1s)
//============================================================================


struct  BFs1s_BFu1c_BFs1ll  {
  signed short v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1s_BFu1c_BFs1ll) C1{ Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1ll, BFs1s_BFu1c_BFs1ll)
//============================================================================


struct  BFs1s_BFu1c_BFs1ll_BFs1c  {
  signed short v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1ll_BFs1c) C1{ Fs:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1c_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1ll_BFs1c, BFs1s_BFu1c_BFs1ll_BFs1c)
//============================================================================


struct  BFs1s_BFu1c_BFs1ll_BFs1i  {
  signed short v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1ll_BFs1i) C1{ Fs:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1c_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1ll_BFs1i, BFs1s_BFu1c_BFs1ll_BFs1i)
//============================================================================


struct  BFs1s_BFu1c_BFs1ll_BFs1ll  {
  signed short v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1ll_BFs1ll) C1{ Fs:1 Fc:1 FL:1 FL:1}



static void Test_BFs1s_BFu1c_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1ll_BFs1ll, BFs1s_BFu1c_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFu1c_BFs1ll_BFs1s  {
  signed short v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1ll_BFs1s) C1{ Fs:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1c_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1ll_BFs1s, BFs1s_BFu1c_BFs1ll_BFs1s)
//============================================================================


struct  BFs1s_BFu1c_BFs1ll_BFu1c  {
  signed short v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1ll_BFu1c) C1{ Fs:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1c_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1ll_BFu1c, BFs1s_BFu1c_BFs1ll_BFu1c)
//============================================================================


struct  BFs1s_BFu1c_BFs1ll_BFu1i  {
  signed short v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1ll_BFu1i) C1{ Fs:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1c_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1ll_BFu1i, BFs1s_BFu1c_BFs1ll_BFu1i)
//============================================================================


struct  BFs1s_BFu1c_BFs1ll_BFu1ll  {
  signed short v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1ll_BFu1ll) C1{ Fs:1 Fc:1 FL:1 FL:1}



static void Test_BFs1s_BFu1c_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1ll_BFu1ll, BFs1s_BFu1c_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFu1c_BFs1ll_BFu1s  {
  signed short v1:1;
  unsigned char v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1ll_BFu1s) C1{ Fs:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1c_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1ll_BFu1s, BFs1s_BFu1c_BFs1ll_BFu1s)
//============================================================================


struct  BFs1s_BFu1c_BFs1s  {
  signed short v1:1;
  unsigned char v2:1;
  signed short v3:1;
};
//SIG(1 BFs1s_BFu1c_BFs1s) C1{ Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1s, BFs1s_BFu1c_BFs1s)
//============================================================================


struct  BFs1s_BFu1c_BFs1s_BFs1c  {
  signed short v1:1;
  unsigned char v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1s_BFs1c) C1{ Fs:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1c_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFs1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1s_BFs1c, BFs1s_BFu1c_BFs1s_BFs1c)
//============================================================================


struct  BFs1s_BFu1c_BFs1s_BFs1i  {
  signed short v1:1;
  unsigned char v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1s_BFs1i) C1{ Fs:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1c_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1s_BFs1i, BFs1s_BFu1c_BFs1s_BFs1i)
//============================================================================


struct  BFs1s_BFu1c_BFs1s_BFs1ll  {
  signed short v1:1;
  unsigned char v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1s_BFs1ll) C1{ Fs:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1c_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1s_BFs1ll, BFs1s_BFu1c_BFs1s_BFs1ll)
//============================================================================


struct  BFs1s_BFu1c_BFs1s_BFs1s  {
  signed short v1:1;
  unsigned char v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1s_BFs1s) C1{ Fs:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1c_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFs1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1s_BFs1s, BFs1s_BFu1c_BFs1s_BFs1s)
//============================================================================


struct  BFs1s_BFu1c_BFs1s_BFu1c  {
  signed short v1:1;
  unsigned char v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1s_BFu1c) C1{ Fs:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1c_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFs1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1s_BFu1c, BFs1s_BFu1c_BFs1s_BFu1c)
//============================================================================


struct  BFs1s_BFu1c_BFs1s_BFu1i  {
  signed short v1:1;
  unsigned char v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1s_BFu1i) C1{ Fs:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1c_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFs1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1s_BFu1i, BFs1s_BFu1c_BFs1s_BFu1i)
//============================================================================


struct  BFs1s_BFu1c_BFs1s_BFu1ll  {
  signed short v1:1;
  unsigned char v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1s_BFu1ll) C1{ Fs:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1c_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1s_BFu1ll, BFs1s_BFu1c_BFs1s_BFu1ll)
//============================================================================


struct  BFs1s_BFu1c_BFs1s_BFu1s  {
  signed short v1:1;
  unsigned char v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFs1s_BFu1s) C1{ Fs:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1c_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFs1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFs1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1c_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFs1s_BFu1s, BFs1s_BFu1c_BFs1s_BFu1s)
//============================================================================


struct  BFs1s_BFu1c_BFu1c  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1s_BFu1c_BFu1c) C1{ Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1c, BFs1s_BFu1c_BFu1c)
//============================================================================


struct  BFs1s_BFu1c_BFu1c_BFs1c  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1c_BFs1c) C1{ Fs:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1c_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1c_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFu1c_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1c_BFs1c, BFs1s_BFu1c_BFu1c_BFs1c)
//============================================================================


struct  BFs1s_BFu1c_BFu1c_BFs1i  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1c_BFs1i) C1{ Fs:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1c_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1c_BFs1i, BFs1s_BFu1c_BFu1c_BFs1i)
//============================================================================


struct  BFs1s_BFu1c_BFu1c_BFs1ll  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1c_BFs1ll) C1{ Fs:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1c_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1c_BFs1ll, BFs1s_BFu1c_BFu1c_BFs1ll)
//============================================================================


struct  BFs1s_BFu1c_BFu1c_BFs1s  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1c_BFs1s) C1{ Fs:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1c_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1c_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFu1c_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1c_BFs1s, BFs1s_BFu1c_BFu1c_BFs1s)
//============================================================================


struct  BFs1s_BFu1c_BFu1c_BFu1c  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1c_BFu1c) C1{ Fs:1 Fc:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1c_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFu1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1c_BFu1c, BFs1s_BFu1c_BFu1c_BFu1c)
//============================================================================


struct  BFs1s_BFu1c_BFu1c_BFu1i  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1c_BFu1i) C1{ Fs:1 Fc:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1c_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1c_BFu1i, BFs1s_BFu1c_BFu1c_BFu1i)
//============================================================================


struct  BFs1s_BFu1c_BFu1c_BFu1ll  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1c_BFu1ll) C1{ Fs:1 Fc:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1c_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1c_BFu1ll, BFs1s_BFu1c_BFu1c_BFu1ll)
//============================================================================


struct  BFs1s_BFu1c_BFu1c_BFu1s  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1c_BFu1s) C1{ Fs:1 Fc:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1c_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1c_BFu1s, BFs1s_BFu1c_BFu1c_BFu1s)
//============================================================================


struct  BFs1s_BFu1c_BFu1i  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1s_BFu1c_BFu1i) C1{ Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1i, BFs1s_BFu1c_BFu1i)
//============================================================================


struct  BFs1s_BFu1c_BFu1i_BFs1c  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1i_BFs1c) C1{ Fs:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1c_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1i_BFs1c, BFs1s_BFu1c_BFu1i_BFs1c)
//============================================================================


struct  BFs1s_BFu1c_BFu1i_BFs1i  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1i_BFs1i) C1{ Fs:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1c_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1i_BFs1i, BFs1s_BFu1c_BFu1i_BFs1i)
//============================================================================


struct  BFs1s_BFu1c_BFu1i_BFs1ll  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1i_BFs1ll) C1{ Fs:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1c_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1i_BFs1ll, BFs1s_BFu1c_BFu1i_BFs1ll)
//============================================================================


struct  BFs1s_BFu1c_BFu1i_BFs1s  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1i_BFs1s) C1{ Fs:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1c_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1i_BFs1s, BFs1s_BFu1c_BFu1i_BFs1s)
//============================================================================


struct  BFs1s_BFu1c_BFu1i_BFu1c  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1i_BFu1c) C1{ Fs:1 Fc:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1c_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1i_BFu1c, BFs1s_BFu1c_BFu1i_BFu1c)
//============================================================================


struct  BFs1s_BFu1c_BFu1i_BFu1i  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1i_BFu1i) C1{ Fs:1 Fc:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1c_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1i_BFu1i, BFs1s_BFu1c_BFu1i_BFu1i)
//============================================================================


struct  BFs1s_BFu1c_BFu1i_BFu1ll  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1i_BFu1ll) C1{ Fs:1 Fc:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1c_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1i_BFu1ll, BFs1s_BFu1c_BFu1i_BFu1ll)
//============================================================================


struct  BFs1s_BFu1c_BFu1i_BFu1s  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1i_BFu1s) C1{ Fs:1 Fc:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1c_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1i_BFu1s, BFs1s_BFu1c_BFu1i_BFu1s)
//============================================================================


struct  BFs1s_BFu1c_BFu1ll  {
  signed short v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1s_BFu1c_BFu1ll) C1{ Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1ll, BFs1s_BFu1c_BFu1ll)
//============================================================================


struct  BFs1s_BFu1c_BFu1ll_BFs1c  {
  signed short v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1ll_BFs1c) C1{ Fs:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1c_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1ll_BFs1c, BFs1s_BFu1c_BFu1ll_BFs1c)
//============================================================================


struct  BFs1s_BFu1c_BFu1ll_BFs1i  {
  signed short v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1ll_BFs1i) C1{ Fs:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1c_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1ll_BFs1i, BFs1s_BFu1c_BFu1ll_BFs1i)
//============================================================================


struct  BFs1s_BFu1c_BFu1ll_BFs1ll  {
  signed short v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1ll_BFs1ll) C1{ Fs:1 Fc:1 FL:1 FL:1}



static void Test_BFs1s_BFu1c_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1ll_BFs1ll, BFs1s_BFu1c_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFu1c_BFu1ll_BFs1s  {
  signed short v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1ll_BFs1s) C1{ Fs:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1c_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1ll_BFs1s, BFs1s_BFu1c_BFu1ll_BFs1s)
//============================================================================


struct  BFs1s_BFu1c_BFu1ll_BFu1c  {
  signed short v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1ll_BFu1c) C1{ Fs:1 Fc:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1c_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1ll_BFu1c, BFs1s_BFu1c_BFu1ll_BFu1c)
//============================================================================


struct  BFs1s_BFu1c_BFu1ll_BFu1i  {
  signed short v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1ll_BFu1i) C1{ Fs:1 Fc:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1c_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1ll_BFu1i, BFs1s_BFu1c_BFu1ll_BFu1i)
//============================================================================


struct  BFs1s_BFu1c_BFu1ll_BFu1ll  {
  signed short v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1ll_BFu1ll) C1{ Fs:1 Fc:1 FL:1 FL:1}



static void Test_BFs1s_BFu1c_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1ll_BFu1ll, BFs1s_BFu1c_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFu1c_BFu1ll_BFu1s  {
  signed short v1:1;
  unsigned char v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1ll_BFu1s) C1{ Fs:1 Fc:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1c_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1ll_BFu1s, BFs1s_BFu1c_BFu1ll_BFu1s)
//============================================================================


struct  BFs1s_BFu1c_BFu1s  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1s_BFu1c_BFu1s) C1{ Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1s, BFs1s_BFu1c_BFu1s)
//============================================================================


struct  BFs1s_BFu1c_BFu1s_BFs1c  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1s_BFs1c) C1{ Fs:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1c_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFu1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1s_BFs1c, BFs1s_BFu1c_BFu1s_BFs1c)
//============================================================================


struct  BFs1s_BFu1c_BFu1s_BFs1i  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1s_BFs1i) C1{ Fs:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1c_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1s_BFs1i, BFs1s_BFu1c_BFu1s_BFs1i)
//============================================================================


struct  BFs1s_BFu1c_BFu1s_BFs1ll  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1s_BFs1ll) C1{ Fs:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1c_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1s_BFs1ll, BFs1s_BFu1c_BFu1s_BFs1ll)
//============================================================================


struct  BFs1s_BFu1c_BFu1s_BFs1s  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1s_BFs1s) C1{ Fs:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1c_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFu1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1c_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1s_BFs1s, BFs1s_BFu1c_BFu1s_BFs1s)
//============================================================================


struct  BFs1s_BFu1c_BFu1s_BFu1c  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1s_BFu1c) C1{ Fs:1 Fc:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1c_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1s_BFu1c, BFs1s_BFu1c_BFu1s_BFu1c)
//============================================================================


struct  BFs1s_BFu1c_BFu1s_BFu1i  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1s_BFu1i) C1{ Fs:1 Fc:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1c_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1c_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1c_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1s_BFu1i, BFs1s_BFu1c_BFu1s_BFu1i)
//============================================================================


struct  BFs1s_BFu1c_BFu1s_BFu1ll  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1s_BFu1ll) C1{ Fs:1 Fc:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1c_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1c_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1c_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1s_BFu1ll, BFs1s_BFu1c_BFu1s_BFu1ll)
//============================================================================


struct  BFs1s_BFu1c_BFu1s_BFu1s  {
  signed short v1:1;
  unsigned char v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1c_BFu1s_BFu1s) C1{ Fs:1 Fc:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1c_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1c_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1c_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1c_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1c_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1c_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1c_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1c_BFu1s_BFu1s, BFs1s_BFu1c_BFu1s_BFu1s)
//============================================================================


struct  BFs1s_BFu1i  {
  signed short v1:1;
  unsigned int v2:1;
};
//SIG(1 BFs1s_BFu1i) C1{ Fs:1 Fi:1}



static void Test_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i, BFs1s_BFu1i)
//============================================================================


struct  BFs1s_BFu1i_BFs1c  {
  signed short v1:1;
  unsigned int v2:1;
  signed char v3:1;
};
//SIG(1 BFs1s_BFu1i_BFs1c) C1{ Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1c, BFs1s_BFu1i_BFs1c)
//============================================================================


struct  BFs1s_BFu1i_BFs1c_BFs1c  {
  signed short v1:1;
  unsigned int v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1c_BFs1c) C1{ Fs:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1i_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1c_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1c_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1c_BFs1c, BFs1s_BFu1i_BFs1c_BFs1c)
//============================================================================


struct  BFs1s_BFu1i_BFs1c_BFs1i  {
  signed short v1:1;
  unsigned int v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1c_BFs1i) C1{ Fs:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1i_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1c_BFs1i, BFs1s_BFu1i_BFs1c_BFs1i)
//============================================================================


struct  BFs1s_BFu1i_BFs1c_BFs1ll  {
  signed short v1:1;
  unsigned int v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1c_BFs1ll) C1{ Fs:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1i_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1c_BFs1ll, BFs1s_BFu1i_BFs1c_BFs1ll)
//============================================================================


struct  BFs1s_BFu1i_BFs1c_BFs1s  {
  signed short v1:1;
  unsigned int v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1c_BFs1s) C1{ Fs:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1i_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1c_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1c_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1c_BFs1s, BFs1s_BFu1i_BFs1c_BFs1s)
//============================================================================


struct  BFs1s_BFu1i_BFs1c_BFu1c  {
  signed short v1:1;
  unsigned int v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1c_BFu1c) C1{ Fs:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1i_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1c_BFu1c, BFs1s_BFu1i_BFs1c_BFu1c)
//============================================================================


struct  BFs1s_BFu1i_BFs1c_BFu1i  {
  signed short v1:1;
  unsigned int v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1c_BFu1i) C1{ Fs:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1i_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1c_BFu1i, BFs1s_BFu1i_BFs1c_BFu1i)
//============================================================================


struct  BFs1s_BFu1i_BFs1c_BFu1ll  {
  signed short v1:1;
  unsigned int v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1c_BFu1ll) C1{ Fs:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1i_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1c_BFu1ll, BFs1s_BFu1i_BFs1c_BFu1ll)
//============================================================================


struct  BFs1s_BFu1i_BFs1c_BFu1s  {
  signed short v1:1;
  unsigned int v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1c_BFu1s) C1{ Fs:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1i_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1c_BFu1s, BFs1s_BFu1i_BFs1c_BFu1s)
//============================================================================


struct  BFs1s_BFu1i_BFs1i  {
  signed short v1:1;
  unsigned int v2:1;
  signed int v3:1;
};
//SIG(1 BFs1s_BFu1i_BFs1i) C1{ Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1i, BFs1s_BFu1i_BFs1i)
//============================================================================


struct  BFs1s_BFu1i_BFs1i_BFs1c  {
  signed short v1:1;
  unsigned int v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1i_BFs1c) C1{ Fs:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1i_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1i_BFs1c, BFs1s_BFu1i_BFs1i_BFs1c)
//============================================================================


struct  BFs1s_BFu1i_BFs1i_BFs1i  {
  signed short v1:1;
  unsigned int v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1i_BFs1i) C1{ Fs:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1i_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1i_BFs1i, BFs1s_BFu1i_BFs1i_BFs1i)
//============================================================================


struct  BFs1s_BFu1i_BFs1i_BFs1ll  {
  signed short v1:1;
  unsigned int v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1i_BFs1ll) C1{ Fs:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1i_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1i_BFs1ll, BFs1s_BFu1i_BFs1i_BFs1ll)
//============================================================================


struct  BFs1s_BFu1i_BFs1i_BFs1s  {
  signed short v1:1;
  unsigned int v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1i_BFs1s) C1{ Fs:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1i_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1i_BFs1s, BFs1s_BFu1i_BFs1i_BFs1s)
//============================================================================


struct  BFs1s_BFu1i_BFs1i_BFu1c  {
  signed short v1:1;
  unsigned int v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1i_BFu1c) C1{ Fs:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1i_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1i_BFu1c, BFs1s_BFu1i_BFs1i_BFu1c)
//============================================================================


struct  BFs1s_BFu1i_BFs1i_BFu1i  {
  signed short v1:1;
  unsigned int v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1i_BFu1i) C1{ Fs:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1i_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1i_BFu1i, BFs1s_BFu1i_BFs1i_BFu1i)
//============================================================================


struct  BFs1s_BFu1i_BFs1i_BFu1ll  {
  signed short v1:1;
  unsigned int v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1i_BFu1ll) C1{ Fs:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1i_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1i_BFu1ll, BFs1s_BFu1i_BFs1i_BFu1ll)
//============================================================================


struct  BFs1s_BFu1i_BFs1i_BFu1s  {
  signed short v1:1;
  unsigned int v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1i_BFu1s) C1{ Fs:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1i_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1i_BFu1s, BFs1s_BFu1i_BFs1i_BFu1s)
//============================================================================


struct  BFs1s_BFu1i_BFs1ll  {
  signed short v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1s_BFu1i_BFs1ll) C1{ Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1ll, BFs1s_BFu1i_BFs1ll)
//============================================================================


struct  BFs1s_BFu1i_BFs1ll_BFs1c  {
  signed short v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1ll_BFs1c) C1{ Fs:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1i_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1ll_BFs1c, BFs1s_BFu1i_BFs1ll_BFs1c)
//============================================================================


struct  BFs1s_BFu1i_BFs1ll_BFs1i  {
  signed short v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1ll_BFs1i) C1{ Fs:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1i_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1ll_BFs1i, BFs1s_BFu1i_BFs1ll_BFs1i)
//============================================================================


struct  BFs1s_BFu1i_BFs1ll_BFs1ll  {
  signed short v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1ll_BFs1ll) C1{ Fs:1 Fi:1 FL:1 FL:1}



static void Test_BFs1s_BFu1i_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1ll_BFs1ll, BFs1s_BFu1i_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFu1i_BFs1ll_BFs1s  {
  signed short v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1ll_BFs1s) C1{ Fs:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1i_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1ll_BFs1s, BFs1s_BFu1i_BFs1ll_BFs1s)
//============================================================================


struct  BFs1s_BFu1i_BFs1ll_BFu1c  {
  signed short v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1ll_BFu1c) C1{ Fs:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1i_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1ll_BFu1c, BFs1s_BFu1i_BFs1ll_BFu1c)
//============================================================================


struct  BFs1s_BFu1i_BFs1ll_BFu1i  {
  signed short v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1ll_BFu1i) C1{ Fs:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1i_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1ll_BFu1i, BFs1s_BFu1i_BFs1ll_BFu1i)
//============================================================================


struct  BFs1s_BFu1i_BFs1ll_BFu1ll  {
  signed short v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1ll_BFu1ll) C1{ Fs:1 Fi:1 FL:1 FL:1}



static void Test_BFs1s_BFu1i_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1ll_BFu1ll, BFs1s_BFu1i_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFu1i_BFs1ll_BFu1s  {
  signed short v1:1;
  unsigned int v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1ll_BFu1s) C1{ Fs:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1i_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1ll_BFu1s, BFs1s_BFu1i_BFs1ll_BFu1s)
//============================================================================


struct  BFs1s_BFu1i_BFs1s  {
  signed short v1:1;
  unsigned int v2:1;
  signed short v3:1;
};
//SIG(1 BFs1s_BFu1i_BFs1s) C1{ Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1s, BFs1s_BFu1i_BFs1s)
//============================================================================


struct  BFs1s_BFu1i_BFs1s_BFs1c  {
  signed short v1:1;
  unsigned int v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1s_BFs1c) C1{ Fs:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1i_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1s_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1s_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1s_BFs1c, BFs1s_BFu1i_BFs1s_BFs1c)
//============================================================================


struct  BFs1s_BFu1i_BFs1s_BFs1i  {
  signed short v1:1;
  unsigned int v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1s_BFs1i) C1{ Fs:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1i_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1s_BFs1i, BFs1s_BFu1i_BFs1s_BFs1i)
//============================================================================


struct  BFs1s_BFu1i_BFs1s_BFs1ll  {
  signed short v1:1;
  unsigned int v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1s_BFs1ll) C1{ Fs:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1i_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1s_BFs1ll, BFs1s_BFu1i_BFs1s_BFs1ll)
//============================================================================


struct  BFs1s_BFu1i_BFs1s_BFs1s  {
  signed short v1:1;
  unsigned int v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1s_BFs1s) C1{ Fs:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1i_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1s_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1s_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1s_BFs1s, BFs1s_BFu1i_BFs1s_BFs1s)
//============================================================================


struct  BFs1s_BFu1i_BFs1s_BFu1c  {
  signed short v1:1;
  unsigned int v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1s_BFu1c) C1{ Fs:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1i_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1s_BFu1c, BFs1s_BFu1i_BFs1s_BFu1c)
//============================================================================


struct  BFs1s_BFu1i_BFs1s_BFu1i  {
  signed short v1:1;
  unsigned int v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1s_BFu1i) C1{ Fs:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1i_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1s_BFu1i, BFs1s_BFu1i_BFs1s_BFu1i)
//============================================================================


struct  BFs1s_BFu1i_BFs1s_BFu1ll  {
  signed short v1:1;
  unsigned int v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1s_BFu1ll) C1{ Fs:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1i_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1s_BFu1ll, BFs1s_BFu1i_BFs1s_BFu1ll)
//============================================================================


struct  BFs1s_BFu1i_BFs1s_BFu1s  {
  signed short v1:1;
  unsigned int v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFs1s_BFu1s) C1{ Fs:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1i_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFs1s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFs1s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1i_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFs1s_BFu1s, BFs1s_BFu1i_BFs1s_BFu1s)
//============================================================================


struct  BFs1s_BFu1i_BFu1c  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1s_BFu1i_BFu1c) C1{ Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1c, BFs1s_BFu1i_BFu1c)
//============================================================================


struct  BFs1s_BFu1i_BFu1c_BFs1c  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1c_BFs1c) C1{ Fs:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1i_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1c_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1c_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1c_BFs1c, BFs1s_BFu1i_BFu1c_BFs1c)
//============================================================================


struct  BFs1s_BFu1i_BFu1c_BFs1i  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1c_BFs1i) C1{ Fs:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1i_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1c_BFs1i, BFs1s_BFu1i_BFu1c_BFs1i)
//============================================================================


struct  BFs1s_BFu1i_BFu1c_BFs1ll  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1c_BFs1ll) C1{ Fs:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1i_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1c_BFs1ll, BFs1s_BFu1i_BFu1c_BFs1ll)
//============================================================================


struct  BFs1s_BFu1i_BFu1c_BFs1s  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1c_BFs1s) C1{ Fs:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1i_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1c_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1c_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1c_BFs1s, BFs1s_BFu1i_BFu1c_BFs1s)
//============================================================================


struct  BFs1s_BFu1i_BFu1c_BFu1c  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1c_BFu1c) C1{ Fs:1 Fi:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1i_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1c_BFu1c, BFs1s_BFu1i_BFu1c_BFu1c)
//============================================================================


struct  BFs1s_BFu1i_BFu1c_BFu1i  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1c_BFu1i) C1{ Fs:1 Fi:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1i_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1c_BFu1i, BFs1s_BFu1i_BFu1c_BFu1i)
//============================================================================


struct  BFs1s_BFu1i_BFu1c_BFu1ll  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1c_BFu1ll) C1{ Fs:1 Fi:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1i_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1c_BFu1ll, BFs1s_BFu1i_BFu1c_BFu1ll)
//============================================================================


struct  BFs1s_BFu1i_BFu1c_BFu1s  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1c_BFu1s) C1{ Fs:1 Fi:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1i_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1c_BFu1s, BFs1s_BFu1i_BFu1c_BFu1s)
//============================================================================


struct  BFs1s_BFu1i_BFu1i  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1s_BFu1i_BFu1i) C1{ Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1i, BFs1s_BFu1i_BFu1i)
//============================================================================


struct  BFs1s_BFu1i_BFu1i_BFs1c  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1i_BFs1c) C1{ Fs:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1i_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1i_BFs1c, BFs1s_BFu1i_BFu1i_BFs1c)
//============================================================================


struct  BFs1s_BFu1i_BFu1i_BFs1i  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1i_BFs1i) C1{ Fs:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1i_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1i_BFs1i, BFs1s_BFu1i_BFu1i_BFs1i)
//============================================================================


struct  BFs1s_BFu1i_BFu1i_BFs1ll  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1i_BFs1ll) C1{ Fs:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1i_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1i_BFs1ll, BFs1s_BFu1i_BFu1i_BFs1ll)
//============================================================================


struct  BFs1s_BFu1i_BFu1i_BFs1s  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1i_BFs1s) C1{ Fs:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1i_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1i_BFs1s, BFs1s_BFu1i_BFu1i_BFs1s)
//============================================================================


struct  BFs1s_BFu1i_BFu1i_BFu1c  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1i_BFu1c) C1{ Fs:1 Fi:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1i_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1i_BFu1c, BFs1s_BFu1i_BFu1i_BFu1c)
//============================================================================


struct  BFs1s_BFu1i_BFu1i_BFu1i  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1i_BFu1i) C1{ Fs:1 Fi:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1i_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1i_BFu1i, BFs1s_BFu1i_BFu1i_BFu1i)
//============================================================================


struct  BFs1s_BFu1i_BFu1i_BFu1ll  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1i_BFu1ll) C1{ Fs:1 Fi:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1i_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1i_BFu1ll, BFs1s_BFu1i_BFu1i_BFu1ll)
//============================================================================


struct  BFs1s_BFu1i_BFu1i_BFu1s  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1i_BFu1s) C1{ Fs:1 Fi:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1i_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1i_BFu1s, BFs1s_BFu1i_BFu1i_BFu1s)
//============================================================================


struct  BFs1s_BFu1i_BFu1ll  {
  signed short v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1s_BFu1i_BFu1ll) C1{ Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1ll, BFs1s_BFu1i_BFu1ll)
//============================================================================


struct  BFs1s_BFu1i_BFu1ll_BFs1c  {
  signed short v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1ll_BFs1c) C1{ Fs:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1i_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1ll_BFs1c, BFs1s_BFu1i_BFu1ll_BFs1c)
//============================================================================


struct  BFs1s_BFu1i_BFu1ll_BFs1i  {
  signed short v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1ll_BFs1i) C1{ Fs:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1i_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1ll_BFs1i, BFs1s_BFu1i_BFu1ll_BFs1i)
//============================================================================


struct  BFs1s_BFu1i_BFu1ll_BFs1ll  {
  signed short v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1ll_BFs1ll) C1{ Fs:1 Fi:1 FL:1 FL:1}



static void Test_BFs1s_BFu1i_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1ll_BFs1ll, BFs1s_BFu1i_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFu1i_BFu1ll_BFs1s  {
  signed short v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1ll_BFs1s) C1{ Fs:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1i_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1ll_BFs1s, BFs1s_BFu1i_BFu1ll_BFs1s)
//============================================================================


struct  BFs1s_BFu1i_BFu1ll_BFu1c  {
  signed short v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1ll_BFu1c) C1{ Fs:1 Fi:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1i_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1ll_BFu1c, BFs1s_BFu1i_BFu1ll_BFu1c)
//============================================================================


struct  BFs1s_BFu1i_BFu1ll_BFu1i  {
  signed short v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1ll_BFu1i) C1{ Fs:1 Fi:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1i_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1ll_BFu1i, BFs1s_BFu1i_BFu1ll_BFu1i)
//============================================================================


struct  BFs1s_BFu1i_BFu1ll_BFu1ll  {
  signed short v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1ll_BFu1ll) C1{ Fs:1 Fi:1 FL:1 FL:1}



static void Test_BFs1s_BFu1i_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1ll_BFu1ll, BFs1s_BFu1i_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFu1i_BFu1ll_BFu1s  {
  signed short v1:1;
  unsigned int v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1ll_BFu1s) C1{ Fs:1 Fi:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1i_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1ll_BFu1s, BFs1s_BFu1i_BFu1ll_BFu1s)
//============================================================================


struct  BFs1s_BFu1i_BFu1s  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1s_BFu1i_BFu1s) C1{ Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1s, BFs1s_BFu1i_BFu1s)
//============================================================================


struct  BFs1s_BFu1i_BFu1s_BFs1c  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1s_BFs1c) C1{ Fs:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1i_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1s_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1s_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1s_BFs1c, BFs1s_BFu1i_BFu1s_BFs1c)
//============================================================================


struct  BFs1s_BFu1i_BFu1s_BFs1i  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1s_BFs1i) C1{ Fs:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1i_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1s_BFs1i, BFs1s_BFu1i_BFu1s_BFs1i)
//============================================================================


struct  BFs1s_BFu1i_BFu1s_BFs1ll  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1s_BFs1ll) C1{ Fs:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1i_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1s_BFs1ll, BFs1s_BFu1i_BFu1s_BFs1ll)
//============================================================================


struct  BFs1s_BFu1i_BFu1s_BFs1s  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1s_BFs1s) C1{ Fs:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1i_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1s_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1s_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1i_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1s_BFs1s, BFs1s_BFu1i_BFu1s_BFs1s)
//============================================================================


struct  BFs1s_BFu1i_BFu1s_BFu1c  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1s_BFu1c) C1{ Fs:1 Fi:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1i_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1s_BFu1c, BFs1s_BFu1i_BFu1s_BFu1c)
//============================================================================


struct  BFs1s_BFu1i_BFu1s_BFu1i  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1s_BFu1i) C1{ Fs:1 Fi:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1i_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1s_BFu1i, BFs1s_BFu1i_BFu1s_BFu1i)
//============================================================================


struct  BFs1s_BFu1i_BFu1s_BFu1ll  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1s_BFu1ll) C1{ Fs:1 Fi:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1i_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1i_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1i_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1s_BFu1ll, BFs1s_BFu1i_BFu1s_BFu1ll)
//============================================================================


struct  BFs1s_BFu1i_BFu1s_BFu1s  {
  signed short v1:1;
  unsigned int v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1i_BFu1s_BFu1s) C1{ Fs:1 Fi:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1i_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1i_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1i_BFu1s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1i_BFu1s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1i_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1i_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1i_BFu1s_BFu1s, BFs1s_BFu1i_BFu1s_BFu1s)
//============================================================================


struct  BFs1s_BFu1ll  {
  signed short v1:1;
  __tsu64 v2:1;
};
//SIG(1 BFs1s_BFu1ll) C1{ Fs:1 FL:1}



static void Test_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll, BFs1s_BFu1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFs1c  {
  signed short v1:1;
  __tsu64 v2:1;
  signed char v3:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1c) C1{ Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1c, BFs1s_BFu1ll_BFs1c)
//============================================================================


struct  BFs1s_BFu1ll_BFs1c_BFs1c  {
  signed short v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1c_BFs1c) C1{ Fs:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1c_BFs1c, BFs1s_BFu1ll_BFs1c_BFs1c)
//============================================================================


struct  BFs1s_BFu1ll_BFs1c_BFs1i  {
  signed short v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1c_BFs1i) C1{ Fs:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1c_BFs1i, BFs1s_BFu1ll_BFs1c_BFs1i)
//============================================================================


struct  BFs1s_BFu1ll_BFs1c_BFs1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1c_BFs1ll) C1{ Fs:1 FL:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1ll_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1c_BFs1ll, BFs1s_BFu1ll_BFs1c_BFs1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFs1c_BFs1s  {
  signed short v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1c_BFs1s) C1{ Fs:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1c_BFs1s, BFs1s_BFu1ll_BFs1c_BFs1s)
//============================================================================


struct  BFs1s_BFu1ll_BFs1c_BFu1c  {
  signed short v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1c_BFu1c) C1{ Fs:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1c_BFu1c, BFs1s_BFu1ll_BFs1c_BFu1c)
//============================================================================


struct  BFs1s_BFu1ll_BFs1c_BFu1i  {
  signed short v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1c_BFu1i) C1{ Fs:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1c_BFu1i, BFs1s_BFu1ll_BFs1c_BFu1i)
//============================================================================


struct  BFs1s_BFu1ll_BFs1c_BFu1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1c_BFu1ll) C1{ Fs:1 FL:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1ll_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1c_BFu1ll, BFs1s_BFu1ll_BFs1c_BFu1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFs1c_BFu1s  {
  signed short v1:1;
  __tsu64 v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1c_BFu1s) C1{ Fs:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1c_BFu1s, BFs1s_BFu1ll_BFs1c_BFu1s)
//============================================================================


struct  BFs1s_BFu1ll_BFs1i  {
  signed short v1:1;
  __tsu64 v2:1;
  signed int v3:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1i) C1{ Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1i, BFs1s_BFu1ll_BFs1i)
//============================================================================


struct  BFs1s_BFu1ll_BFs1i_BFs1c  {
  signed short v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1i_BFs1c) C1{ Fs:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1i_BFs1c, BFs1s_BFu1ll_BFs1i_BFs1c)
//============================================================================


struct  BFs1s_BFu1ll_BFs1i_BFs1i  {
  signed short v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1i_BFs1i) C1{ Fs:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1i_BFs1i, BFs1s_BFu1ll_BFs1i_BFs1i)
//============================================================================


struct  BFs1s_BFu1ll_BFs1i_BFs1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1i_BFs1ll) C1{ Fs:1 FL:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1ll_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1i_BFs1ll, BFs1s_BFu1ll_BFs1i_BFs1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFs1i_BFs1s  {
  signed short v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1i_BFs1s) C1{ Fs:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1i_BFs1s, BFs1s_BFu1ll_BFs1i_BFs1s)
//============================================================================


struct  BFs1s_BFu1ll_BFs1i_BFu1c  {
  signed short v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1i_BFu1c) C1{ Fs:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1i_BFu1c, BFs1s_BFu1ll_BFs1i_BFu1c)
//============================================================================


struct  BFs1s_BFu1ll_BFs1i_BFu1i  {
  signed short v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1i_BFu1i) C1{ Fs:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1i_BFu1i, BFs1s_BFu1ll_BFs1i_BFu1i)
//============================================================================


struct  BFs1s_BFu1ll_BFs1i_BFu1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1i_BFu1ll) C1{ Fs:1 FL:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1ll_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1i_BFu1ll, BFs1s_BFu1ll_BFs1i_BFu1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFs1i_BFu1s  {
  signed short v1:1;
  __tsu64 v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1i_BFu1s) C1{ Fs:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1i_BFu1s, BFs1s_BFu1ll_BFs1i_BFu1s)
//============================================================================


struct  BFs1s_BFu1ll_BFs1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1ll) C1{ Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1ll, BFs1s_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFs1ll_BFs1c  {
  signed short v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1ll_BFs1c) C1{ Fs:1 FL:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1ll_BFs1c, BFs1s_BFu1ll_BFs1ll_BFs1c)
//============================================================================


struct  BFs1s_BFu1ll_BFs1ll_BFs1i  {
  signed short v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1ll_BFs1i) C1{ Fs:1 FL:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1ll_BFs1i, BFs1s_BFu1ll_BFs1ll_BFs1i)
//============================================================================


struct  BFs1s_BFu1ll_BFs1ll_BFs1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1ll_BFs1ll) C1{ Fs:1 FL:1 FL:1 FL:1}



static void Test_BFs1s_BFu1ll_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1ll_BFs1ll, BFs1s_BFu1ll_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFs1ll_BFs1s  {
  signed short v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1ll_BFs1s) C1{ Fs:1 FL:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1ll_BFs1s, BFs1s_BFu1ll_BFs1ll_BFs1s)
//============================================================================


struct  BFs1s_BFu1ll_BFs1ll_BFu1c  {
  signed short v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1ll_BFu1c) C1{ Fs:1 FL:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1ll_BFu1c, BFs1s_BFu1ll_BFs1ll_BFu1c)
//============================================================================


struct  BFs1s_BFu1ll_BFs1ll_BFu1i  {
  signed short v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1ll_BFu1i) C1{ Fs:1 FL:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1ll_BFu1i, BFs1s_BFu1ll_BFs1ll_BFu1i)
//============================================================================


struct  BFs1s_BFu1ll_BFs1ll_BFu1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1ll_BFu1ll) C1{ Fs:1 FL:1 FL:1 FL:1}



static void Test_BFs1s_BFu1ll_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1ll_BFu1ll, BFs1s_BFu1ll_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFs1ll_BFu1s  {
  signed short v1:1;
  __tsu64 v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1ll_BFu1s) C1{ Fs:1 FL:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1ll_BFu1s, BFs1s_BFu1ll_BFs1ll_BFu1s)
//============================================================================


struct  BFs1s_BFu1ll_BFs1s  {
  signed short v1:1;
  __tsu64 v2:1;
  signed short v3:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1s) C1{ Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1s, BFs1s_BFu1ll_BFs1s)
//============================================================================


struct  BFs1s_BFu1ll_BFs1s_BFs1c  {
  signed short v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1s_BFs1c) C1{ Fs:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1s_BFs1c, BFs1s_BFu1ll_BFs1s_BFs1c)
//============================================================================


struct  BFs1s_BFu1ll_BFs1s_BFs1i  {
  signed short v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1s_BFs1i) C1{ Fs:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1s_BFs1i, BFs1s_BFu1ll_BFs1s_BFs1i)
//============================================================================


struct  BFs1s_BFu1ll_BFs1s_BFs1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1s_BFs1ll) C1{ Fs:1 FL:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1ll_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1s_BFs1ll, BFs1s_BFu1ll_BFs1s_BFs1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFs1s_BFs1s  {
  signed short v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1s_BFs1s) C1{ Fs:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1s_BFs1s, BFs1s_BFu1ll_BFs1s_BFs1s)
//============================================================================


struct  BFs1s_BFu1ll_BFs1s_BFu1c  {
  signed short v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1s_BFu1c) C1{ Fs:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1s_BFu1c, BFs1s_BFu1ll_BFs1s_BFu1c)
//============================================================================


struct  BFs1s_BFu1ll_BFs1s_BFu1i  {
  signed short v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1s_BFu1i) C1{ Fs:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1s_BFu1i, BFs1s_BFu1ll_BFs1s_BFu1i)
//============================================================================


struct  BFs1s_BFu1ll_BFs1s_BFu1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1s_BFu1ll) C1{ Fs:1 FL:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1ll_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1s_BFu1ll, BFs1s_BFu1ll_BFs1s_BFu1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFs1s_BFu1s  {
  signed short v1:1;
  __tsu64 v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFs1s_BFu1s) C1{ Fs:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFs1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFs1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1ll_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFs1s_BFu1s, BFs1s_BFu1ll_BFs1s_BFu1s)
//============================================================================


struct  BFs1s_BFu1ll_BFu1c  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1c) C1{ Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1c, BFs1s_BFu1ll_BFu1c)
//============================================================================


struct  BFs1s_BFu1ll_BFu1c_BFs1c  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1c_BFs1c) C1{ Fs:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1c_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1c_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1c_BFs1c, BFs1s_BFu1ll_BFu1c_BFs1c)
//============================================================================


struct  BFs1s_BFu1ll_BFu1c_BFs1i  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1c_BFs1i) C1{ Fs:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1c_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1c_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1c_BFs1i, BFs1s_BFu1ll_BFu1c_BFs1i)
//============================================================================


struct  BFs1s_BFu1ll_BFu1c_BFs1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1c_BFs1ll) C1{ Fs:1 FL:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1ll_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1c_BFs1ll, BFs1s_BFu1ll_BFu1c_BFs1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFu1c_BFs1s  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1c_BFs1s) C1{ Fs:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1c_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1c_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1c_BFs1s, BFs1s_BFu1ll_BFu1c_BFs1s)
//============================================================================


struct  BFs1s_BFu1ll_BFu1c_BFu1c  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1c_BFu1c) C1{ Fs:1 FL:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1c_BFu1c, BFs1s_BFu1ll_BFu1c_BFu1c)
//============================================================================


struct  BFs1s_BFu1ll_BFu1c_BFu1i  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1c_BFu1i) C1{ Fs:1 FL:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1c_BFu1i, BFs1s_BFu1ll_BFu1c_BFu1i)
//============================================================================


struct  BFs1s_BFu1ll_BFu1c_BFu1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1c_BFu1ll) C1{ Fs:1 FL:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1ll_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1c_BFu1ll, BFs1s_BFu1ll_BFu1c_BFu1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFu1c_BFu1s  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1c_BFu1s) C1{ Fs:1 FL:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1c_BFu1s, BFs1s_BFu1ll_BFu1c_BFu1s)
//============================================================================


struct  BFs1s_BFu1ll_BFu1i  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1i) C1{ Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1i, BFs1s_BFu1ll_BFu1i)
//============================================================================


struct  BFs1s_BFu1ll_BFu1i_BFs1c  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1i_BFs1c) C1{ Fs:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1i_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1i_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1i_BFs1c, BFs1s_BFu1ll_BFu1i_BFs1c)
//============================================================================


struct  BFs1s_BFu1ll_BFu1i_BFs1i  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1i_BFs1i) C1{ Fs:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1i_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1i_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1i_BFs1i, BFs1s_BFu1ll_BFu1i_BFs1i)
//============================================================================


struct  BFs1s_BFu1ll_BFu1i_BFs1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1i_BFs1ll) C1{ Fs:1 FL:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1ll_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1i_BFs1ll, BFs1s_BFu1ll_BFu1i_BFs1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFu1i_BFs1s  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1i_BFs1s) C1{ Fs:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1i_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1i_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1i_BFs1s, BFs1s_BFu1ll_BFu1i_BFs1s)
//============================================================================


struct  BFs1s_BFu1ll_BFu1i_BFu1c  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1i_BFu1c) C1{ Fs:1 FL:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1i_BFu1c, BFs1s_BFu1ll_BFu1i_BFu1c)
//============================================================================


struct  BFs1s_BFu1ll_BFu1i_BFu1i  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1i_BFu1i) C1{ Fs:1 FL:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1i_BFu1i, BFs1s_BFu1ll_BFu1i_BFu1i)
//============================================================================


struct  BFs1s_BFu1ll_BFu1i_BFu1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1i_BFu1ll) C1{ Fs:1 FL:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1ll_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1i_BFu1ll, BFs1s_BFu1ll_BFu1i_BFu1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFu1i_BFu1s  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1i_BFu1s) C1{ Fs:1 FL:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1i_BFu1s, BFs1s_BFu1ll_BFu1i_BFu1s)
//============================================================================


struct  BFs1s_BFu1ll_BFu1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1ll) C1{ Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1ll, BFs1s_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFu1ll_BFs1c  {
  signed short v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1ll_BFs1c) C1{ Fs:1 FL:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1ll_BFs1c, BFs1s_BFu1ll_BFu1ll_BFs1c)
//============================================================================


struct  BFs1s_BFu1ll_BFu1ll_BFs1i  {
  signed short v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1ll_BFs1i) C1{ Fs:1 FL:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1ll_BFs1i, BFs1s_BFu1ll_BFu1ll_BFs1i)
//============================================================================


struct  BFs1s_BFu1ll_BFu1ll_BFs1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1ll_BFs1ll) C1{ Fs:1 FL:1 FL:1 FL:1}



static void Test_BFs1s_BFu1ll_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1ll_BFs1ll, BFs1s_BFu1ll_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFu1ll_BFs1s  {
  signed short v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1ll_BFs1s) C1{ Fs:1 FL:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1ll_BFs1s, BFs1s_BFu1ll_BFu1ll_BFs1s)
//============================================================================


struct  BFs1s_BFu1ll_BFu1ll_BFu1c  {
  signed short v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1ll_BFu1c) C1{ Fs:1 FL:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1ll_BFu1c, BFs1s_BFu1ll_BFu1ll_BFu1c)
//============================================================================


struct  BFs1s_BFu1ll_BFu1ll_BFu1i  {
  signed short v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1ll_BFu1i) C1{ Fs:1 FL:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1ll_BFu1i, BFs1s_BFu1ll_BFu1ll_BFu1i)
//============================================================================


struct  BFs1s_BFu1ll_BFu1ll_BFu1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1ll_BFu1ll) C1{ Fs:1 FL:1 FL:1 FL:1}



static void Test_BFs1s_BFu1ll_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1ll_BFu1ll, BFs1s_BFu1ll_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFu1ll_BFu1s  {
  signed short v1:1;
  __tsu64 v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1ll_BFu1s) C1{ Fs:1 FL:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1ll_BFu1s, BFs1s_BFu1ll_BFu1ll_BFu1s)
//============================================================================


struct  BFs1s_BFu1ll_BFu1s  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1s) C1{ Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1s, BFs1s_BFu1ll_BFu1s)
//============================================================================


struct  BFs1s_BFu1ll_BFu1s_BFs1c  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1s_BFs1c) C1{ Fs:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1s_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1s_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1s_BFs1c, BFs1s_BFu1ll_BFu1s_BFs1c)
//============================================================================


struct  BFs1s_BFu1ll_BFu1s_BFs1i  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1s_BFs1i) C1{ Fs:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1s_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1s_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1s_BFs1i, BFs1s_BFu1ll_BFu1s_BFs1i)
//============================================================================


struct  BFs1s_BFu1ll_BFu1s_BFs1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1s_BFs1ll) C1{ Fs:1 FL:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1ll_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1s_BFs1ll, BFs1s_BFu1ll_BFu1s_BFs1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFu1s_BFs1s  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1s_BFs1s) C1{ Fs:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1s_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1s_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1ll_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1s_BFs1s, BFs1s_BFu1ll_BFu1s_BFs1s)
//============================================================================


struct  BFs1s_BFu1ll_BFu1s_BFu1c  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1s_BFu1c) C1{ Fs:1 FL:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1ll_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1s_BFu1c, BFs1s_BFu1ll_BFu1s_BFu1c)
//============================================================================


struct  BFs1s_BFu1ll_BFu1s_BFu1i  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1s_BFu1i) C1{ Fs:1 FL:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1ll_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1s_BFu1i, BFs1s_BFu1ll_BFu1s_BFu1i)
//============================================================================


struct  BFs1s_BFu1ll_BFu1s_BFu1ll  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1s_BFu1ll) C1{ Fs:1 FL:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1ll_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1s_BFu1ll, BFs1s_BFu1ll_BFu1s_BFu1ll)
//============================================================================


struct  BFs1s_BFu1ll_BFu1s_BFu1s  {
  signed short v1:1;
  __tsu64 v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1ll_BFu1s_BFu1s) C1{ Fs:1 FL:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1ll_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1ll_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1ll_BFu1s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1ll_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1ll_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1ll_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1ll_BFu1s_BFu1s, BFs1s_BFu1ll_BFu1s_BFu1s)
//============================================================================


struct  BFs1s_BFu1s  {
  signed short v1:1;
  unsigned short v2:1;
};
//SIG(1 BFs1s_BFu1s) C1{ Fs:1 Fs:1}



static void Test_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s, BFs1s_BFu1s)
//============================================================================


struct  BFs1s_BFu1s_BFs1c  {
  signed short v1:1;
  unsigned short v2:1;
  signed char v3:1;
};
//SIG(1 BFs1s_BFu1s_BFs1c) C1{ Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1c, BFs1s_BFu1s_BFs1c)
//============================================================================


struct  BFs1s_BFu1s_BFs1c_BFs1c  {
  signed short v1:1;
  unsigned short v2:1;
  signed char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1c_BFs1c) C1{ Fs:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1s_BFs1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1c_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFs1c_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFs1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1c_BFs1c, BFs1s_BFu1s_BFs1c_BFs1c)
//============================================================================


struct  BFs1s_BFu1s_BFs1c_BFs1i  {
  signed short v1:1;
  unsigned short v2:1;
  signed char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1c_BFs1i) C1{ Fs:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1s_BFs1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1c_BFs1i, BFs1s_BFu1s_BFs1c_BFs1i)
//============================================================================


struct  BFs1s_BFu1s_BFs1c_BFs1ll  {
  signed short v1:1;
  unsigned short v2:1;
  signed char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1c_BFs1ll) C1{ Fs:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1s_BFs1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1c_BFs1ll, BFs1s_BFu1s_BFs1c_BFs1ll)
//============================================================================


struct  BFs1s_BFu1s_BFs1c_BFs1s  {
  signed short v1:1;
  unsigned short v2:1;
  signed char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1c_BFs1s) C1{ Fs:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1s_BFs1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1c_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFs1c_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFs1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1c_BFs1s, BFs1s_BFu1s_BFs1c_BFs1s)
//============================================================================


struct  BFs1s_BFu1s_BFs1c_BFu1c  {
  signed short v1:1;
  unsigned short v2:1;
  signed char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1c_BFu1c) C1{ Fs:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1s_BFs1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFs1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFs1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1c_BFu1c, BFs1s_BFu1s_BFs1c_BFu1c)
//============================================================================


struct  BFs1s_BFu1s_BFs1c_BFu1i  {
  signed short v1:1;
  unsigned short v2:1;
  signed char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1c_BFu1i) C1{ Fs:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1s_BFs1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1c_BFu1i, BFs1s_BFu1s_BFs1c_BFu1i)
//============================================================================


struct  BFs1s_BFu1s_BFs1c_BFu1ll  {
  signed short v1:1;
  unsigned short v2:1;
  signed char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1c_BFu1ll) C1{ Fs:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1s_BFs1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1c_BFu1ll, BFs1s_BFu1s_BFs1c_BFu1ll)
//============================================================================


struct  BFs1s_BFu1s_BFs1c_BFu1s  {
  signed short v1:1;
  unsigned short v2:1;
  signed char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1c_BFu1s) C1{ Fs:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1s_BFs1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFs1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFs1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1c_BFu1s, BFs1s_BFu1s_BFs1c_BFu1s)
//============================================================================


struct  BFs1s_BFu1s_BFs1i  {
  signed short v1:1;
  unsigned short v2:1;
  signed int v3:1;
};
//SIG(1 BFs1s_BFu1s_BFs1i) C1{ Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1i, BFs1s_BFu1s_BFs1i)
//============================================================================


struct  BFs1s_BFu1s_BFs1i_BFs1c  {
  signed short v1:1;
  unsigned short v2:1;
  signed int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1i_BFs1c) C1{ Fs:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1s_BFs1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1i_BFs1c, BFs1s_BFu1s_BFs1i_BFs1c)
//============================================================================


struct  BFs1s_BFu1s_BFs1i_BFs1i  {
  signed short v1:1;
  unsigned short v2:1;
  signed int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1i_BFs1i) C1{ Fs:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1s_BFs1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1i_BFs1i, BFs1s_BFu1s_BFs1i_BFs1i)
//============================================================================


struct  BFs1s_BFu1s_BFs1i_BFs1ll  {
  signed short v1:1;
  unsigned short v2:1;
  signed int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1i_BFs1ll) C1{ Fs:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1s_BFs1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1i_BFs1ll, BFs1s_BFu1s_BFs1i_BFs1ll)
//============================================================================


struct  BFs1s_BFu1s_BFs1i_BFs1s  {
  signed short v1:1;
  unsigned short v2:1;
  signed int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1i_BFs1s) C1{ Fs:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1s_BFs1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1i_BFs1s, BFs1s_BFu1s_BFs1i_BFs1s)
//============================================================================


struct  BFs1s_BFu1s_BFs1i_BFu1c  {
  signed short v1:1;
  unsigned short v2:1;
  signed int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1i_BFu1c) C1{ Fs:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1s_BFs1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1i_BFu1c, BFs1s_BFu1s_BFs1i_BFu1c)
//============================================================================


struct  BFs1s_BFu1s_BFs1i_BFu1i  {
  signed short v1:1;
  unsigned short v2:1;
  signed int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1i_BFu1i) C1{ Fs:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1s_BFs1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1i_BFu1i, BFs1s_BFu1s_BFs1i_BFu1i)
//============================================================================


struct  BFs1s_BFu1s_BFs1i_BFu1ll  {
  signed short v1:1;
  unsigned short v2:1;
  signed int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1i_BFu1ll) C1{ Fs:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1s_BFs1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1i_BFu1ll, BFs1s_BFu1s_BFs1i_BFu1ll)
//============================================================================


struct  BFs1s_BFu1s_BFs1i_BFu1s  {
  signed short v1:1;
  unsigned short v2:1;
  signed int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1i_BFu1s) C1{ Fs:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1s_BFs1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1i_BFu1s, BFs1s_BFu1s_BFs1i_BFu1s)
//============================================================================


struct  BFs1s_BFu1s_BFs1ll  {
  signed short v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
};
//SIG(1 BFs1s_BFu1s_BFs1ll) C1{ Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1ll, BFs1s_BFu1s_BFs1ll)
//============================================================================


struct  BFs1s_BFu1s_BFs1ll_BFs1c  {
  signed short v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1ll_BFs1c) C1{ Fs:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1s_BFs1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1ll_BFs1c, BFs1s_BFu1s_BFs1ll_BFs1c)
//============================================================================


struct  BFs1s_BFu1s_BFs1ll_BFs1i  {
  signed short v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1ll_BFs1i) C1{ Fs:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1s_BFs1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1ll_BFs1i, BFs1s_BFu1s_BFs1ll_BFs1i)
//============================================================================


struct  BFs1s_BFu1s_BFs1ll_BFs1ll  {
  signed short v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1ll_BFs1ll) C1{ Fs:1 Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFu1s_BFs1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1ll_BFs1ll, BFs1s_BFu1s_BFs1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFu1s_BFs1ll_BFs1s  {
  signed short v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1ll_BFs1s) C1{ Fs:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1s_BFs1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1ll_BFs1s, BFs1s_BFu1s_BFs1ll_BFs1s)
//============================================================================


struct  BFs1s_BFu1s_BFs1ll_BFu1c  {
  signed short v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1ll_BFu1c) C1{ Fs:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1s_BFs1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1ll_BFu1c, BFs1s_BFu1s_BFs1ll_BFu1c)
//============================================================================


struct  BFs1s_BFu1s_BFs1ll_BFu1i  {
  signed short v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1ll_BFu1i) C1{ Fs:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1s_BFs1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1ll_BFu1i, BFs1s_BFu1s_BFs1ll_BFu1i)
//============================================================================


struct  BFs1s_BFu1s_BFs1ll_BFu1ll  {
  signed short v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1ll_BFu1ll) C1{ Fs:1 Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFu1s_BFs1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1ll_BFu1ll, BFs1s_BFu1s_BFs1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFu1s_BFs1ll_BFu1s  {
  signed short v1:1;
  unsigned short v2:1;
  signed __tsi64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1ll_BFu1s) C1{ Fs:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1s_BFs1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1ll_BFu1s, BFs1s_BFu1s_BFs1ll_BFu1s)
//============================================================================


struct  BFs1s_BFu1s_BFs1s  {
  signed short v1:1;
  unsigned short v2:1;
  signed short v3:1;
};
//SIG(1 BFs1s_BFu1s_BFs1s) C1{ Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1s, BFs1s_BFu1s_BFs1s)
//============================================================================


struct  BFs1s_BFu1s_BFs1s_BFs1c  {
  signed short v1:1;
  unsigned short v2:1;
  signed short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1s_BFs1c) C1{ Fs:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1s_BFs1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFs1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFs1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1s_BFs1c, BFs1s_BFu1s_BFs1s_BFs1c)
//============================================================================


struct  BFs1s_BFu1s_BFs1s_BFs1i  {
  signed short v1:1;
  unsigned short v2:1;
  signed short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1s_BFs1i) C1{ Fs:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1s_BFs1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1s_BFs1i, BFs1s_BFu1s_BFs1s_BFs1i)
//============================================================================


struct  BFs1s_BFu1s_BFs1s_BFs1ll  {
  signed short v1:1;
  unsigned short v2:1;
  signed short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1s_BFs1ll) C1{ Fs:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1s_BFs1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1s_BFs1ll, BFs1s_BFu1s_BFs1s_BFs1ll)
//============================================================================


struct  BFs1s_BFu1s_BFs1s_BFs1s  {
  signed short v1:1;
  unsigned short v2:1;
  signed short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1s_BFs1s) C1{ Fs:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1s_BFs1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFs1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFs1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFs1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1s_BFs1s, BFs1s_BFu1s_BFs1s_BFs1s)
//============================================================================


struct  BFs1s_BFu1s_BFs1s_BFu1c  {
  signed short v1:1;
  unsigned short v2:1;
  signed short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1s_BFu1c) C1{ Fs:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1s_BFs1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFs1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFs1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1s_BFu1c, BFs1s_BFu1s_BFs1s_BFu1c)
//============================================================================


struct  BFs1s_BFu1s_BFs1s_BFu1i  {
  signed short v1:1;
  unsigned short v2:1;
  signed short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1s_BFu1i) C1{ Fs:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1s_BFs1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFs1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFs1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1s_BFu1i, BFs1s_BFu1s_BFs1s_BFu1i)
//============================================================================


struct  BFs1s_BFu1s_BFs1s_BFu1ll  {
  signed short v1:1;
  unsigned short v2:1;
  signed short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1s_BFu1ll) C1{ Fs:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1s_BFs1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFs1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFs1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1s_BFu1ll, BFs1s_BFu1s_BFs1s_BFu1ll)
//============================================================================


struct  BFs1s_BFu1s_BFs1s_BFu1s  {
  signed short v1:1;
  unsigned short v2:1;
  signed short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFs1s_BFu1s) C1{ Fs:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1s_BFs1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFs1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFs1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFs1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFs1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, -1, "BFs1s_BFu1s_BFs1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFs1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFs1s_BFu1s, BFs1s_BFu1s_BFs1s_BFu1s)
//============================================================================


struct  BFs1s_BFu1s_BFu1c  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFs1s_BFu1s_BFu1c) C1{ Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1c, BFs1s_BFu1s_BFu1c)
//============================================================================


struct  BFs1s_BFu1s_BFu1c_BFs1c  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1c_BFs1c) C1{ Fs:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1s_BFu1c_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1c_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1c_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFu1c_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFu1c_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1c_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1c_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1c_BFs1c, BFs1s_BFu1s_BFu1c_BFs1c)
//============================================================================


struct  BFs1s_BFu1s_BFu1c_BFs1i  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1c_BFs1i) C1{ Fs:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1s_BFu1c_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1c_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1c_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1c_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1c_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1c_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1c_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1c_BFs1i, BFs1s_BFu1s_BFu1c_BFs1i)
//============================================================================


struct  BFs1s_BFu1s_BFu1c_BFs1ll  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1c_BFs1ll) C1{ Fs:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1s_BFu1c_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1c_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1c_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1c_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1c_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1c_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1c_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1c_BFs1ll, BFs1s_BFu1s_BFu1c_BFs1ll)
//============================================================================


struct  BFs1s_BFu1s_BFu1c_BFs1s  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1c_BFs1s) C1{ Fs:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1s_BFu1c_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1c_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1c_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFu1c_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFu1c_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1c_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1c_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1c_BFs1s, BFs1s_BFu1s_BFu1c_BFs1s)
//============================================================================


struct  BFs1s_BFu1s_BFu1c_BFu1c  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1c_BFu1c) C1{ Fs:1 Fs:1 Fc:1 Fc:1}



static void Test_BFs1s_BFu1s_BFu1c_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1c_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFu1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1c_BFu1c, BFs1s_BFu1s_BFu1c_BFu1c)
//============================================================================


struct  BFs1s_BFu1s_BFu1c_BFu1i  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1c_BFu1i) C1{ Fs:1 Fs:1 Fc:1 Fi:1}



static void Test_BFs1s_BFu1s_BFu1c_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1c_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1c_BFu1i, BFs1s_BFu1s_BFu1c_BFu1i)
//============================================================================


struct  BFs1s_BFu1s_BFu1c_BFu1ll  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1c_BFu1ll) C1{ Fs:1 Fs:1 Fc:1 FL:1}



static void Test_BFs1s_BFu1s_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1c_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1c_BFu1ll, BFs1s_BFu1s_BFu1c_BFu1ll)
//============================================================================


struct  BFs1s_BFu1s_BFu1c_BFu1s  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned char v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1c_BFu1s) C1{ Fs:1 Fs:1 Fc:1 Fs:1}



static void Test_BFs1s_BFu1s_BFu1c_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1c_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1c_BFu1s, BFs1s_BFu1s_BFu1c_BFu1s)
//============================================================================


struct  BFs1s_BFu1s_BFu1i  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFs1s_BFu1s_BFu1i) C1{ Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1i, BFs1s_BFu1s_BFu1i)
//============================================================================


struct  BFs1s_BFu1s_BFu1i_BFs1c  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1i_BFs1c) C1{ Fs:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1s_BFu1i_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1i_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1i_BFs1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1i_BFs1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1i_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1i_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1i_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1i_BFs1c, BFs1s_BFu1s_BFu1i_BFs1c)
//============================================================================


struct  BFs1s_BFu1s_BFu1i_BFs1i  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1i_BFs1i) C1{ Fs:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1s_BFu1i_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1i_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1i_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1i_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1i_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1i_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1i_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1i_BFs1i, BFs1s_BFu1s_BFu1i_BFs1i)
//============================================================================


struct  BFs1s_BFu1s_BFu1i_BFs1ll  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1i_BFs1ll) C1{ Fs:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1s_BFu1i_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1i_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1i_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1i_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1i_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1i_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1i_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1i_BFs1ll, BFs1s_BFu1s_BFu1i_BFs1ll)
//============================================================================


struct  BFs1s_BFu1s_BFu1i_BFs1s  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1i_BFs1s) C1{ Fs:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1s_BFu1i_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1i_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1i_BFs1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1i_BFs1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1i_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1i_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1i_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1i_BFs1s, BFs1s_BFu1s_BFu1i_BFs1s)
//============================================================================


struct  BFs1s_BFu1s_BFu1i_BFu1c  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1i_BFu1c) C1{ Fs:1 Fs:1 Fi:1 Fc:1}



static void Test_BFs1s_BFu1s_BFu1i_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1i_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1i_BFu1c, BFs1s_BFu1s_BFu1i_BFu1c)
//============================================================================


struct  BFs1s_BFu1s_BFu1i_BFu1i  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1i_BFu1i) C1{ Fs:1 Fs:1 Fi:1 Fi:1}



static void Test_BFs1s_BFu1s_BFu1i_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1i_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1i_BFu1i, BFs1s_BFu1s_BFu1i_BFu1i)
//============================================================================


struct  BFs1s_BFu1s_BFu1i_BFu1ll  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1i_BFu1ll) C1{ Fs:1 Fs:1 Fi:1 FL:1}



static void Test_BFs1s_BFu1s_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1i_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1i_BFu1ll, BFs1s_BFu1s_BFu1i_BFu1ll)
//============================================================================


struct  BFs1s_BFu1s_BFu1i_BFu1s  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned int v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1i_BFu1s) C1{ Fs:1 Fs:1 Fi:1 Fs:1}



static void Test_BFs1s_BFu1s_BFu1i_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1i_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1i_BFu1s, BFs1s_BFu1s_BFu1i_BFu1s)
//============================================================================


struct  BFs1s_BFu1s_BFu1ll  {
  signed short v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFs1s_BFu1s_BFu1ll) C1{ Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1ll, BFs1s_BFu1s_BFu1ll)
//============================================================================


struct  BFs1s_BFu1s_BFu1ll_BFs1c  {
  signed short v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1ll_BFs1c) C1{ Fs:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1s_BFu1ll_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1ll_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1ll_BFs1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1ll_BFs1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1ll_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1ll_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1ll_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1ll_BFs1c, BFs1s_BFu1s_BFu1ll_BFs1c)
//============================================================================


struct  BFs1s_BFu1s_BFu1ll_BFs1i  {
  signed short v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1ll_BFs1i) C1{ Fs:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1s_BFu1ll_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1ll_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1ll_BFs1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1ll_BFs1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1ll_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1ll_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1ll_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1ll_BFs1i, BFs1s_BFu1s_BFu1ll_BFs1i)
//============================================================================


struct  BFs1s_BFu1s_BFu1ll_BFs1ll  {
  signed short v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1ll_BFs1ll) C1{ Fs:1 Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFu1s_BFu1ll_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1ll_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1ll_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1ll_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1ll_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1ll_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1ll_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1ll_BFs1ll, BFs1s_BFu1s_BFu1ll_BFs1ll)
//============================================================================


struct  BFs1s_BFu1s_BFu1ll_BFs1s  {
  signed short v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1ll_BFs1s) C1{ Fs:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1s_BFu1ll_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1ll_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1ll_BFs1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1ll_BFs1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1ll_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1ll_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1ll_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1ll_BFs1s, BFs1s_BFu1s_BFu1ll_BFs1s)
//============================================================================


struct  BFs1s_BFu1s_BFu1ll_BFu1c  {
  signed short v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1ll_BFu1c) C1{ Fs:1 Fs:1 FL:1 Fc:1}



static void Test_BFs1s_BFu1s_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1ll_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1ll_BFu1c, BFs1s_BFu1s_BFu1ll_BFu1c)
//============================================================================


struct  BFs1s_BFu1s_BFu1ll_BFu1i  {
  signed short v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1ll_BFu1i) C1{ Fs:1 Fs:1 FL:1 Fi:1}



static void Test_BFs1s_BFu1s_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1ll_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1ll_BFu1i, BFs1s_BFu1s_BFu1ll_BFu1i)
//============================================================================


struct  BFs1s_BFu1s_BFu1ll_BFu1ll  {
  signed short v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1ll_BFu1ll) C1{ Fs:1 Fs:1 FL:1 FL:1}



static void Test_BFs1s_BFu1s_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1ll_BFu1ll, BFs1s_BFu1s_BFu1ll_BFu1ll)
//============================================================================


struct  BFs1s_BFu1s_BFu1ll_BFu1s  {
  signed short v1:1;
  unsigned short v2:1;
  __tsu64 v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1ll_BFu1s) C1{ Fs:1 Fs:1 FL:1 Fs:1}



static void Test_BFs1s_BFu1s_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1ll_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1ll_BFu1s, BFs1s_BFu1s_BFu1ll_BFu1s)
//============================================================================


struct  BFs1s_BFu1s_BFu1s  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFs1s_BFu1s_BFu1s) C1{ Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1s, BFs1s_BFu1s_BFu1s)
//============================================================================


struct  BFs1s_BFu1s_BFu1s_BFs1c  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  signed char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1s_BFs1c) C1{ Fs:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1s_BFu1s_BFs1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1s_BFs1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1s_BFs1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFu1s_BFs1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFu1s_BFs1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1s_BFs1c");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1s_BFs1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1s_BFs1c, BFs1s_BFu1s_BFu1s_BFs1c)
//============================================================================


struct  BFs1s_BFu1s_BFu1s_BFs1i  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  signed int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1s_BFs1i) C1{ Fs:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1s_BFu1s_BFs1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1s_BFs1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1s_BFs1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1s_BFs1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1s_BFs1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1s_BFs1i");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1s_BFs1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1s_BFs1i, BFs1s_BFu1s_BFu1s_BFs1i)
//============================================================================


struct  BFs1s_BFu1s_BFu1s_BFs1ll  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  signed __tsi64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1s_BFs1ll) C1{ Fs:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1s_BFu1s_BFs1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1s_BFs1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1s_BFs1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1s_BFs1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1s_BFs1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1s_BFs1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1s_BFs1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1s_BFs1ll, BFs1s_BFu1s_BFu1s_BFs1ll)
//============================================================================


struct  BFs1s_BFu1s_BFu1s_BFs1s  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  signed short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1s_BFs1s) C1{ Fs:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1s_BFu1s_BFs1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1s_BFs1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1s_BFs1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFu1s_BFs1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFu1s_BFs1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1s_BFs1s");
    set_bf_and_test(lv, v4, 0, 3, 1, -1, "BFs1s_BFu1s_BFu1s_BFs1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1s_BFs1s, BFs1s_BFu1s_BFu1s_BFs1s)
//============================================================================


struct  BFs1s_BFu1s_BFu1s_BFu1c  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  unsigned char v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1s_BFu1c) C1{ Fs:1 Fs:1 Fs:1 Fc:1}



static void Test_BFs1s_BFu1s_BFu1s_BFu1c()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1s_BFu1c");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1c");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1s_BFu1c, BFs1s_BFu1s_BFu1s_BFu1c)
//============================================================================


struct  BFs1s_BFu1s_BFu1s_BFu1i  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  unsigned int v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1s_BFu1i) C1{ Fs:1 Fs:1 Fs:1 Fi:1}



static void Test_BFs1s_BFu1s_BFu1s_BFu1i()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1s_BFu1i");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFs1s_BFu1s_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs1s_BFu1s_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1i");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1s_BFu1i, BFs1s_BFu1s_BFu1s_BFu1i)
//============================================================================


struct  BFs1s_BFu1s_BFu1s_BFu1ll  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  __tsu64 v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1s_BFu1ll) C1{ Fs:1 Fs:1 Fs:1 FL:1}



static void Test_BFs1s_BFu1s_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1s_BFu1ll");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs1s_BFu1s_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs1s_BFu1s_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1s_BFu1ll, BFs1s_BFu1s_BFu1s_BFu1ll)
//============================================================================


struct  BFs1s_BFu1s_BFu1s_BFu1s  {
  signed short v1:1;
  unsigned short v2:1;
  unsigned short v3:1;
  unsigned short v4:1;
};
//SIG(1 BFs1s_BFu1s_BFu1s_BFu1s) C1{ Fs:1 Fs:1 Fs:1 Fs:1}



static void Test_BFs1s_BFu1s_BFu1s_BFu1s()
{
  {
    init_simple_test("BFs1s_BFu1s_BFu1s_BFu1s");
    static STRUCT_IF_C BFs1s_BFu1s_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFs1s_BFu1s_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs1s_BFu1s_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, -1, "BFs1s_BFu1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 0, 2, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1s");
    set_bf_and_test(lv, v4, 0, 3, 1, 1, "BFs1s_BFu1s_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs1s_BFu1s_BFu1s_BFu1s, BFs1s_BFu1s_BFu1s_BFu1s)
//============================================================================


struct  BFs31i_BFs31i  {
  signed int v1:31;
  signed int v2:31;
};
//SIG(1 BFs31i_BFs31i) C1{ Fi:31 Fi:31}



static void Test_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31i lv;
    check2(sizeof(lv), 8, "sizeof(BFs31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i, BFs31i_BFs31i)
//============================================================================


struct  BFs31i_BFs31i_BFs31i  {
  signed int v1:31;
  signed int v2:31;
  signed int v3:31;
};
//SIG(1 BFs31i_BFs31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31i_BFs31i lv;
    check2(sizeof(lv), 12, "sizeof(BFs31i_BFs31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFs31i, BFs31i_BFs31i_BFs31i)
//============================================================================


struct  BFs31i_BFs31i_BFs31i_BFs31i  {
  signed int v1:31;
  signed int v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFs31i_BFs31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFs31i_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31i_BFs31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31i_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFs31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFs31i_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFs31i_BFs31i, BFs31i_BFs31i_BFs31i_BFs31i)
//============================================================================


struct  BFs31i_BFs31i_BFs31i_BFs31ll  {
  signed int v1:31;
  signed int v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFs31i_BFs31i_BFs31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFs31i_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31i_BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31i_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFs31i_BFs31ll, BFs31i_BFs31i_BFs31i_BFs31ll)
//============================================================================


struct  BFs31i_BFs31i_BFs31i_BFu31i  {
  signed int v1:31;
  signed int v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFs31i_BFs31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFs31i_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFs31i_BFs31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFs31i_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFs31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFs31i_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFs31i_BFu31i, BFs31i_BFs31i_BFs31i_BFu31i)
//============================================================================


struct  BFs31i_BFs31i_BFs31i_BFu31ll  {
  signed int v1:31;
  signed int v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFs31i_BFs31i_BFu31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFs31i_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFs31i_BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFs31i_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFs31i_BFu31ll, BFs31i_BFs31i_BFs31i_BFu31ll)
//============================================================================


struct  BFs31i_BFs31i_BFs31ll  {
  signed int v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFs31i_BFs31i_BFs31ll) C1{ Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31i_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFs31ll, BFs31i_BFs31i_BFs31ll)
//============================================================================


struct  BFs31i_BFs31i_BFs31ll_BFs31i  {
  signed int v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFs31i_BFs31ll_BFs31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFs31i_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31i_BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31i_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFs31ll_BFs31i, BFs31i_BFs31i_BFs31ll_BFs31i)
//============================================================================


struct  BFs31i_BFs31i_BFs31ll_BFs31ll  {
  signed int v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFs31i_BFs31ll_BFs31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFs31i_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31i_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31i_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFs31ll_BFs31ll, BFs31i_BFs31i_BFs31ll_BFs31ll)
//============================================================================


struct  BFs31i_BFs31i_BFs31ll_BFu31i  {
  signed int v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFs31i_BFs31ll_BFu31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFs31i_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31i_BFs31i_BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31i_BFs31i_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFs31ll_BFu31i, BFs31i_BFs31i_BFs31ll_BFu31i)
//============================================================================


struct  BFs31i_BFs31i_BFs31ll_BFu31ll  {
  signed int v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFs31i_BFs31ll_BFu31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFs31i_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFs31i_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31i_BFs31i_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFs31ll_BFu31ll, BFs31i_BFs31i_BFs31ll_BFu31ll)
//============================================================================


struct  BFs31i_BFs31i_BFu31i  {
  signed int v1:31;
  signed int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFs31i_BFs31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFs31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFs31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFs31i_BFs31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFu31i, BFs31i_BFs31i_BFu31i)
//============================================================================


struct  BFs31i_BFs31i_BFu31i_BFs31i  {
  signed int v1:31;
  signed int v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFs31i_BFu31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFs31i_BFu31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31i_BFu31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31i_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFu31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFs31i_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFu31i_BFs31i, BFs31i_BFs31i_BFu31i_BFs31i)
//============================================================================


struct  BFs31i_BFs31i_BFu31i_BFs31ll  {
  signed int v1:31;
  signed int v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFs31i_BFu31i_BFs31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFs31i_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31i_BFu31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31i_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFu31i_BFs31ll, BFs31i_BFs31i_BFu31i_BFs31ll)
//============================================================================


struct  BFs31i_BFs31i_BFu31i_BFu31i  {
  signed int v1:31;
  signed int v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFs31i_BFu31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFs31i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFs31i_BFu31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFs31i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFs31i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFu31i_BFu31i, BFs31i_BFs31i_BFu31i_BFu31i)
//============================================================================


struct  BFs31i_BFs31i_BFu31i_BFu31ll  {
  signed int v1:31;
  signed int v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFs31i_BFu31i_BFu31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFs31i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFs31i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFs31i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFu31i_BFu31ll, BFs31i_BFs31i_BFu31i_BFu31ll)
//============================================================================


struct  BFs31i_BFs31i_BFu31ll  {
  signed int v1:31;
  signed int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFs31i_BFs31i_BFu31ll) C1{ Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFs31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFu31ll, BFs31i_BFs31i_BFu31ll)
//============================================================================


struct  BFs31i_BFs31i_BFu31ll_BFs31i  {
  signed int v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFs31i_BFu31ll_BFs31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFs31i_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31i_BFu31ll_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31i_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFu31ll_BFs31i, BFs31i_BFs31i_BFu31ll_BFs31i)
//============================================================================


struct  BFs31i_BFs31i_BFu31ll_BFs31ll  {
  signed int v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFs31i_BFu31ll_BFs31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFs31i_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31i_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31i_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFu31ll_BFs31ll, BFs31i_BFs31i_BFu31ll_BFs31ll)
//============================================================================


struct  BFs31i_BFs31i_BFu31ll_BFu31i  {
  signed int v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFs31i_BFu31ll_BFu31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFs31i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFs31i_BFs31i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFs31i_BFs31i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFu31ll_BFu31i, BFs31i_BFs31i_BFu31ll_BFu31i)
//============================================================================


struct  BFs31i_BFs31i_BFu31ll_BFu31ll  {
  signed int v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFs31i_BFu31ll_BFu31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFs31i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFs31i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFs31i_BFs31i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFs31i_BFs31i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31i_BFu31ll_BFu31ll, BFs31i_BFs31i_BFu31ll_BFu31ll)
//============================================================================


struct  BFs31i_BFs31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
};
//SIG(1 BFs31i_BFs31ll) C1{ Fi:31 FL:31}



static void Test_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll, BFs31i_BFs31ll)
//============================================================================


struct  BFs31i_BFs31ll_BFs31i  {
  signed int v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
};
//SIG(1 BFs31i_BFs31ll_BFs31i) C1{ Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31ll_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFs31i, BFs31i_BFs31ll_BFs31i)
//============================================================================


struct  BFs31i_BFs31ll_BFs31i_BFs31i  {
  signed int v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFs31i_BFs31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31i_BFs31ll_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFs31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31ll_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFs31i_BFs31i, BFs31i_BFs31ll_BFs31i_BFs31i)
//============================================================================


struct  BFs31i_BFs31ll_BFs31i_BFs31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFs31i_BFs31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFs31i_BFs31ll_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31ll_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFs31i_BFs31ll, BFs31i_BFs31ll_BFs31i_BFs31ll)
//============================================================================


struct  BFs31i_BFs31ll_BFs31i_BFu31i  {
  signed int v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFs31i_BFu31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31i_BFs31ll_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFs31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFs31ll_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFs31i_BFu31i, BFs31i_BFs31ll_BFs31i_BFu31i)
//============================================================================


struct  BFs31i_BFs31ll_BFs31i_BFu31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFs31i_BFu31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFs31i_BFs31ll_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFs31ll_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFs31i_BFu31ll, BFs31i_BFs31ll_BFs31i_BFu31ll)
//============================================================================


struct  BFs31i_BFs31ll_BFs31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFs31i_BFs31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFs31ll, BFs31i_BFs31ll_BFs31ll)
//============================================================================


struct  BFs31i_BFs31ll_BFs31ll_BFs31i  {
  signed int v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFs31ll_BFs31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFs31i_BFs31ll_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31ll_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFs31ll_BFs31i, BFs31i_BFs31ll_BFs31ll_BFs31i)
//============================================================================


struct  BFs31i_BFs31ll_BFs31ll_BFs31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFs31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFs31i_BFs31ll_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31ll_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFs31ll_BFs31ll, BFs31i_BFs31ll_BFs31ll_BFs31ll)
//============================================================================


struct  BFs31i_BFs31ll_BFs31ll_BFu31i  {
  signed int v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFs31ll_BFu31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFs31i_BFs31ll_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31i_BFs31ll_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFs31ll_BFu31i, BFs31i_BFs31ll_BFs31ll_BFu31i)
//============================================================================


struct  BFs31i_BFs31ll_BFs31ll_BFu31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFs31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFs31i_BFs31ll_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31i_BFs31ll_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFs31ll_BFu31ll, BFs31i_BFs31ll_BFs31ll_BFu31ll)
//============================================================================


struct  BFs31i_BFs31ll_BFu31i  {
  signed int v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFs31i_BFs31ll_BFu31i) C1{ Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31i_BFs31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFu31i, BFs31i_BFs31ll_BFu31i)
//============================================================================


struct  BFs31i_BFs31ll_BFu31i_BFs31i  {
  signed int v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFu31i_BFs31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31i_BFs31ll_BFu31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFu31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31ll_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFu31i_BFs31i, BFs31i_BFs31ll_BFu31i_BFs31i)
//============================================================================


struct  BFs31i_BFs31ll_BFu31i_BFs31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFu31i_BFs31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFs31i_BFs31ll_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFu31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31ll_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFu31i_BFs31ll, BFs31i_BFs31ll_BFu31i_BFs31ll)
//============================================================================


struct  BFs31i_BFs31ll_BFu31i_BFu31i  {
  signed int v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFu31i_BFu31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31i_BFs31ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFs31ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFu31i_BFu31i, BFs31i_BFs31ll_BFu31i_BFu31i)
//============================================================================


struct  BFs31i_BFs31ll_BFu31i_BFu31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFu31i_BFu31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFs31i_BFs31ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFs31ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFu31i_BFu31ll, BFs31i_BFs31ll_BFu31i_BFu31ll)
//============================================================================


struct  BFs31i_BFs31ll_BFu31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFs31i_BFs31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31i_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFu31ll, BFs31i_BFs31ll_BFu31ll)
//============================================================================


struct  BFs31i_BFs31ll_BFu31ll_BFs31i  {
  signed int v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFu31ll_BFs31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFs31i_BFs31ll_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFu31ll_BFs31i");
    static STRUCT_IF_C BFs31i_BFs31ll_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFu31ll_BFs31i, BFs31i_BFs31ll_BFu31ll_BFs31i)
//============================================================================


struct  BFs31i_BFs31ll_BFu31ll_BFs31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFu31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFs31i_BFs31ll_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFs31i_BFs31ll_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFu31ll_BFs31ll, BFs31i_BFs31ll_BFu31ll_BFs31ll)
//============================================================================


struct  BFs31i_BFs31ll_BFu31ll_BFu31i  {
  signed int v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFu31ll_BFu31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFs31i_BFs31ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFs31i_BFs31ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFu31ll_BFu31i, BFs31i_BFs31ll_BFu31ll_BFu31i)
//============================================================================


struct  BFs31i_BFs31ll_BFu31ll_BFu31ll  {
  signed int v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFs31ll_BFu31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFs31i_BFs31ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFs31ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFs31i_BFs31ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFs31ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFs31ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFs31i_BFs31ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFs31ll_BFu31ll_BFu31ll, BFs31i_BFs31ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFs31i_BFu31i  {
  signed int v1:31;
  unsigned int v2:31;
};
//SIG(1 BFs31i_BFu31i) C1{ Fi:31 Fi:31}



static void Test_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFs31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i, BFs31i_BFu31i)
//============================================================================


struct  BFs31i_BFu31i_BFs31i  {
  signed int v1:31;
  unsigned int v2:31;
  signed int v3:31;
};
//SIG(1 BFs31i_BFu31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFu31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFu31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFu31i_BFs31i lv;
    check2(sizeof(lv), 12, "sizeof(BFs31i_BFu31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFs31i, BFs31i_BFu31i_BFs31i)
//============================================================================


struct  BFs31i_BFu31i_BFs31i_BFs31i  {
  signed int v1:31;
  unsigned int v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFu31i_BFs31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFu31i_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFu31i_BFs31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFu31i_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFs31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFu31i_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFs31i_BFs31i, BFs31i_BFu31i_BFs31i_BFs31i)
//============================================================================


struct  BFs31i_BFu31i_BFs31i_BFs31ll  {
  signed int v1:31;
  unsigned int v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFu31i_BFs31i_BFs31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFu31i_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFu31i_BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFu31i_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFs31i_BFs31ll, BFs31i_BFu31i_BFs31i_BFs31ll)
//============================================================================


struct  BFs31i_BFu31i_BFs31i_BFu31i  {
  signed int v1:31;
  unsigned int v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFu31i_BFs31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFu31i_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31i_BFs31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31i_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFs31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFu31i_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFs31i_BFu31i, BFs31i_BFu31i_BFs31i_BFu31i)
//============================================================================


struct  BFs31i_BFu31i_BFs31i_BFu31ll  {
  signed int v1:31;
  unsigned int v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFu31i_BFs31i_BFu31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFu31i_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31i_BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31i_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFs31i_BFu31ll, BFs31i_BFu31i_BFs31i_BFu31ll)
//============================================================================


struct  BFs31i_BFu31i_BFs31ll  {
  signed int v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFs31i_BFu31i_BFs31ll) C1{ Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFu31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFu31i_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFs31ll, BFs31i_BFu31i_BFs31ll)
//============================================================================


struct  BFs31i_BFu31i_BFs31ll_BFs31i  {
  signed int v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFu31i_BFs31ll_BFs31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFu31i_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31i_BFu31i_BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31i_BFu31i_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFs31ll_BFs31i, BFs31i_BFu31i_BFs31ll_BFs31i)
//============================================================================


struct  BFs31i_BFu31i_BFs31ll_BFs31ll  {
  signed int v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFu31i_BFs31ll_BFs31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFu31i_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFu31i_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31i_BFu31i_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFs31ll_BFs31ll, BFs31i_BFu31i_BFs31ll_BFs31ll)
//============================================================================


struct  BFs31i_BFu31i_BFs31ll_BFu31i  {
  signed int v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFu31i_BFs31ll_BFu31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFu31i_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31i_BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31i_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFs31ll_BFu31i, BFs31i_BFu31i_BFs31ll_BFu31i)
//============================================================================


struct  BFs31i_BFu31i_BFs31ll_BFu31ll  {
  signed int v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFu31i_BFs31ll_BFu31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFu31i_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31i_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31i_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFs31ll_BFu31ll, BFs31i_BFu31i_BFs31ll_BFu31ll)
//============================================================================


struct  BFs31i_BFu31i_BFu31i  {
  signed int v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFs31i_BFu31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFs31i_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFu31i, BFs31i_BFu31i_BFu31i)
//============================================================================


struct  BFs31i_BFu31i_BFu31i_BFs31i  {
  signed int v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFu31i_BFu31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFu31i_BFu31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFu31i_BFu31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFu31i_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFu31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFu31i_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFu31i_BFs31i, BFs31i_BFu31i_BFu31i_BFs31i)
//============================================================================


struct  BFs31i_BFu31i_BFu31i_BFs31ll  {
  signed int v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFu31i_BFu31i_BFs31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFu31i_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFu31i_BFu31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFu31i_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFu31i_BFs31ll, BFs31i_BFu31i_BFu31i_BFs31ll)
//============================================================================


struct  BFs31i_BFu31i_BFu31i_BFu31i  {
  signed int v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFu31i_BFu31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31i_BFu31i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31i_BFu31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs31i_BFu31i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFu31i_BFu31i, BFs31i_BFu31i_BFu31i_BFu31i)
//============================================================================


struct  BFs31i_BFu31i_BFu31i_BFu31ll  {
  signed int v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFu31i_BFu31i_BFu31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFu31i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFu31i_BFu31ll, BFs31i_BFu31i_BFu31i_BFu31ll)
//============================================================================


struct  BFs31i_BFu31i_BFu31ll  {
  signed int v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFs31i_BFu31i_BFu31ll) C1{ Fi:31 Fi:31 FL:31}



static void Test_BFs31i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFu31ll, BFs31i_BFu31i_BFu31ll)
//============================================================================


struct  BFs31i_BFu31i_BFu31ll_BFs31i  {
  signed int v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFu31i_BFu31ll_BFs31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFu31i_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFs31i_BFu31i_BFu31ll_BFs31i");
    static STRUCT_IF_C BFs31i_BFu31i_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFu31ll_BFs31i, BFs31i_BFu31i_BFu31ll_BFs31i)
//============================================================================


struct  BFs31i_BFu31i_BFu31ll_BFs31ll  {
  signed int v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFu31i_BFu31ll_BFs31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFu31i_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFu31i_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFs31i_BFu31i_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFu31ll_BFs31ll, BFs31i_BFu31i_BFu31ll_BFs31ll)
//============================================================================


struct  BFs31i_BFu31i_BFu31ll_BFu31i  {
  signed int v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFu31i_BFu31ll_BFu31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFu31i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFu31ll_BFu31i, BFs31i_BFu31i_BFu31ll_BFu31i)
//============================================================================


struct  BFs31i_BFu31i_BFu31ll_BFu31ll  {
  signed int v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFu31i_BFu31ll_BFu31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFu31i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFs31i_BFu31i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31i_BFu31ll_BFu31ll, BFs31i_BFu31i_BFu31ll_BFu31ll)
//============================================================================


struct  BFs31i_BFu31ll  {
  signed int v1:31;
  __tsu64 v2:31;
};
//SIG(1 BFs31i_BFu31ll) C1{ Fi:31 FL:31}



static void Test_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll, BFs31i_BFu31ll)
//============================================================================


struct  BFs31i_BFu31ll_BFs31i  {
  signed int v1:31;
  __tsu64 v2:31;
  signed int v3:31;
};
//SIG(1 BFs31i_BFu31ll_BFs31i) C1{ Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFs31i");
    static STRUCT_IF_C BFs31i_BFu31ll_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFs31i, BFs31i_BFu31ll_BFs31i)
//============================================================================


struct  BFs31i_BFu31ll_BFs31i_BFs31i  {
  signed int v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFs31i_BFs31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31i_BFu31ll_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFs31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFu31ll_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFs31i_BFs31i, BFs31i_BFu31ll_BFs31i_BFs31i)
//============================================================================


struct  BFs31i_BFu31ll_BFs31i_BFs31ll  {
  signed int v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFs31i_BFs31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFs31i_BFu31ll_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFu31ll_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFs31i_BFs31ll, BFs31i_BFu31ll_BFs31i_BFs31ll)
//============================================================================


struct  BFs31i_BFu31ll_BFs31i_BFu31i  {
  signed int v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFs31i_BFu31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31i_BFu31ll_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFs31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31ll_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFs31i_BFu31i, BFs31i_BFu31ll_BFs31i_BFu31i)
//============================================================================


struct  BFs31i_BFu31ll_BFs31i_BFu31ll  {
  signed int v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFs31i_BFu31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFs31i_BFu31ll_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31ll_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFs31i_BFu31ll, BFs31i_BFu31ll_BFs31i_BFu31ll)
//============================================================================


struct  BFs31i_BFu31ll_BFs31ll  {
  signed int v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFs31i_BFu31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFs31i_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFs31ll, BFs31i_BFu31ll_BFs31ll)
//============================================================================


struct  BFs31i_BFu31ll_BFs31ll_BFs31i  {
  signed int v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFs31ll_BFs31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFs31i_BFu31ll_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31i_BFu31ll_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFs31ll_BFs31i, BFs31i_BFu31ll_BFs31ll_BFs31i)
//============================================================================


struct  BFs31i_BFu31ll_BFs31ll_BFs31ll  {
  signed int v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFs31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFs31i_BFu31ll_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31i_BFu31ll_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFs31ll_BFs31ll, BFs31i_BFu31ll_BFs31ll_BFs31ll)
//============================================================================


struct  BFs31i_BFu31ll_BFs31ll_BFu31i  {
  signed int v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFs31ll_BFu31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFs31i_BFu31ll_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31ll_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFs31ll_BFu31i, BFs31i_BFu31ll_BFs31ll_BFu31i)
//============================================================================


struct  BFs31i_BFu31ll_BFs31ll_BFu31ll  {
  signed int v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFs31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFs31i_BFu31ll_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31ll_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFs31ll_BFu31ll, BFs31i_BFu31ll_BFs31ll_BFu31ll)
//============================================================================


struct  BFs31i_BFu31ll_BFu31i  {
  signed int v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFs31i_BFu31ll_BFu31i) C1{ Fi:31 FL:31 Fi:31}



static void Test_BFs31i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFu31i, BFs31i_BFu31ll_BFu31i)
//============================================================================


struct  BFs31i_BFu31ll_BFu31i_BFs31i  {
  signed int v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFu31i_BFs31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31i_BFu31ll_BFu31i_BFs31i()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFu31i_BFs31i");
    static STRUCT_IF_C BFs31i_BFu31ll_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFu31i_BFs31i, BFs31i_BFu31ll_BFu31i_BFs31i)
//============================================================================


struct  BFs31i_BFu31ll_BFu31i_BFs31ll  {
  signed int v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFu31i_BFs31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFs31i_BFu31ll_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFu31i_BFs31ll");
    static STRUCT_IF_C BFs31i_BFu31ll_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFu31i_BFs31ll, BFs31i_BFu31ll_BFu31i_BFs31ll)
//============================================================================


struct  BFs31i_BFu31ll_BFu31i_BFu31i  {
  signed int v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFu31i_BFu31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31i_BFu31ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFu31i_BFu31i, BFs31i_BFu31ll_BFu31i_BFu31i)
//============================================================================


struct  BFs31i_BFu31ll_BFu31i_BFu31ll  {
  signed int v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFu31i_BFu31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFs31i_BFu31ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFu31i_BFu31ll, BFs31i_BFu31ll_BFu31i_BFu31ll)
//============================================================================


struct  BFs31i_BFu31ll_BFu31ll  {
  signed int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFs31i_BFu31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31}



static void Test_BFs31i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFu31ll, BFs31i_BFu31ll_BFu31ll)
//============================================================================


struct  BFs31i_BFu31ll_BFu31ll_BFs31i  {
  signed int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFu31ll_BFs31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFs31i_BFu31ll_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFu31ll_BFs31i");
    static STRUCT_IF_C BFs31i_BFu31ll_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFu31ll_BFs31i, BFs31i_BFu31ll_BFu31ll_BFs31i)
//============================================================================


struct  BFs31i_BFu31ll_BFu31ll_BFs31ll  {
  signed int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFu31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFs31i_BFu31ll_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFs31i_BFu31ll_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFu31ll_BFs31ll, BFs31i_BFu31ll_BFu31ll_BFs31ll)
//============================================================================


struct  BFs31i_BFu31ll_BFu31ll_BFu31i  {
  signed int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFu31ll_BFu31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFs31i_BFu31ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFs31i_BFu31ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFu31ll_BFu31i, BFs31i_BFu31ll_BFu31ll_BFu31i)
//============================================================================


struct  BFs31i_BFu31ll_BFu31ll_BFu31ll  {
  signed int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31i_BFu31ll_BFu31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFs31i_BFu31ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFs31i_BFu31ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFs31i_BFu31ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31i_BFu31ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31i_BFu31ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFs31i_BFu31ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31i_BFu31ll_BFu31ll_BFu31ll, BFs31i_BFu31ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFs31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
};
//SIG(1 BFs31ll_BFs31i) C1{ FL:31 Fi:31}



static void Test_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31i lv;
    check2(sizeof(lv), 8, "sizeof(BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i, BFs31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFs31i_BFs31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
  signed int v3:31;
};
//SIG(1 BFs31ll_BFs31i_BFs31i) C1{ FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31i_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFs31i, BFs31ll_BFs31i_BFs31i)
//============================================================================


struct  BFs31ll_BFs31i_BFs31i_BFs31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFs31i_BFs31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFs31i_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFs31i_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31i_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFs31i_BFs31i, BFs31ll_BFs31i_BFs31i_BFs31i)
//============================================================================


struct  BFs31ll_BFs31i_BFs31i_BFs31ll  {
  signed __tsi64 v1:31;
  signed int v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFs31i_BFs31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31ll_BFs31i_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31i_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFs31i_BFs31ll, BFs31ll_BFs31i_BFs31i_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31i_BFs31i_BFu31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFs31i_BFu31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFs31i_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFs31i_BFu31i");
    static STRUCT_IF_C BFs31ll_BFs31i_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFs31i_BFu31i, BFs31ll_BFs31i_BFs31i_BFu31i)
//============================================================================


struct  BFs31ll_BFs31i_BFs31i_BFu31ll  {
  signed __tsi64 v1:31;
  signed int v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFs31i_BFu31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31ll_BFs31i_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFs31i_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFs31i_BFu31ll, BFs31ll_BFs31i_BFs31i_BFu31ll)
//============================================================================


struct  BFs31ll_BFs31i_BFs31ll  {
  signed __tsi64 v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFs31ll_BFs31i_BFs31ll) C1{ FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31i_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFs31ll, BFs31ll_BFs31i_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31i_BFs31ll_BFs31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFs31ll_BFs31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31ll_BFs31i_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31i_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFs31ll_BFs31i, BFs31ll_BFs31i_BFs31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFs31i_BFs31ll_BFs31ll  {
  signed __tsi64 v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFs31ll_BFs31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFs31ll_BFs31i_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31i_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFs31ll_BFs31ll, BFs31ll_BFs31i_BFs31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31i_BFs31ll_BFu31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFs31ll_BFu31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31ll_BFs31i_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFs31i_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFs31ll_BFu31i, BFs31ll_BFs31i_BFs31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFs31i_BFs31ll_BFu31ll  {
  signed __tsi64 v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFs31ll_BFu31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFs31ll_BFs31i_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFs31i_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFs31ll_BFu31ll, BFs31ll_BFs31i_BFs31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFs31i_BFu31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFs31ll_BFs31i_BFu31i) C1{ FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFu31i");
    static STRUCT_IF_C BFs31ll_BFs31i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFu31i, BFs31ll_BFs31i_BFu31i)
//============================================================================


struct  BFs31ll_BFs31i_BFu31i_BFs31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFu31i_BFs31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFs31i_BFu31i_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFu31i_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31i_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFu31i_BFs31i, BFs31ll_BFs31i_BFu31i_BFs31i)
//============================================================================


struct  BFs31ll_BFs31i_BFu31i_BFs31ll  {
  signed __tsi64 v1:31;
  signed int v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFu31i_BFs31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31ll_BFs31i_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFu31i_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31i_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFu31i_BFs31ll, BFs31ll_BFs31i_BFu31i_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31i_BFu31i_BFu31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFu31i_BFu31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFs31i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFu31i_BFu31i");
    static STRUCT_IF_C BFs31ll_BFs31i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFu31i_BFu31i, BFs31ll_BFs31i_BFu31i_BFu31i)
//============================================================================


struct  BFs31ll_BFs31i_BFu31i_BFu31ll  {
  signed __tsi64 v1:31;
  signed int v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFu31i_BFu31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31ll_BFs31i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFs31i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFu31i_BFu31ll, BFs31ll_BFs31i_BFu31i_BFu31ll)
//============================================================================


struct  BFs31ll_BFs31i_BFu31ll  {
  signed __tsi64 v1:31;
  signed int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFs31ll_BFs31i_BFu31ll) C1{ FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFs31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFu31ll, BFs31ll_BFs31i_BFu31ll)
//============================================================================


struct  BFs31ll_BFs31i_BFu31ll_BFs31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFu31ll_BFs31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31ll_BFs31i_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFu31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31i_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFu31ll_BFs31i, BFs31ll_BFs31i_BFu31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFs31i_BFu31ll_BFs31ll  {
  signed __tsi64 v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFu31ll_BFs31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFs31ll_BFs31i_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31i_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFu31ll_BFs31ll, BFs31ll_BFs31i_BFu31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31i_BFu31ll_BFu31i  {
  signed __tsi64 v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFu31ll_BFu31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31ll_BFs31i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFs31i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFu31ll_BFu31i, BFs31ll_BFs31i_BFu31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFs31i_BFu31ll_BFu31ll  {
  signed __tsi64 v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFs31i_BFu31ll_BFu31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFs31ll_BFs31i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFs31i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFs31i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFs31ll_BFs31i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31i_BFu31ll_BFu31ll, BFs31ll_BFs31i_BFu31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFs31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
};
//SIG(1 BFs31ll_BFs31ll) C1{ FL:31 FL:31}



static void Test_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll, BFs31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31ll_BFs31i  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
};
//SIG(1 BFs31ll_BFs31ll_BFs31i) C1{ FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFs31i, BFs31ll_BFs31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFs31ll_BFs31i_BFs31i  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFs31i_BFs31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFs31ll_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFs31i_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFs31i_BFs31i, BFs31ll_BFs31ll_BFs31i_BFs31i)
//============================================================================


struct  BFs31ll_BFs31ll_BFs31i_BFs31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFs31i_BFs31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFs31ll_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFs31i_BFs31ll, BFs31ll_BFs31ll_BFs31i_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31ll_BFs31i_BFu31i  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFs31i_BFu31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFs31ll_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFs31i_BFu31i");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFs31i_BFu31i, BFs31ll_BFs31ll_BFs31i_BFu31i)
//============================================================================


struct  BFs31ll_BFs31ll_BFs31i_BFu31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFs31i_BFu31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFs31ll_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFs31i_BFu31ll, BFs31ll_BFs31ll_BFs31i_BFu31ll)
//============================================================================


struct  BFs31ll_BFs31ll_BFs31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFs31ll_BFs31ll_BFs31ll) C1{ FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFs31ll, BFs31ll_BFs31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31ll_BFs31ll_BFs31i  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFs31ll_BFs31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFs31ll_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFs31ll_BFs31i, BFs31ll_BFs31ll_BFs31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFs31ll_BFs31ll_BFs31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFs31ll_BFs31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFs31ll_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFs31ll_BFs31ll, BFs31ll_BFs31ll_BFs31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31ll_BFs31ll_BFu31i  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFs31ll_BFu31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFs31ll_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFs31ll_BFu31i, BFs31ll_BFs31ll_BFs31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFs31ll_BFs31ll_BFu31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFs31ll_BFu31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFs31ll_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFs31ll_BFu31ll, BFs31ll_BFs31ll_BFs31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFs31ll_BFu31i  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFs31ll_BFs31ll_BFu31i) C1{ FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFu31i, BFs31ll_BFs31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFs31ll_BFu31i_BFs31i  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFu31i_BFs31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFs31ll_BFu31i_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFu31i_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFu31i_BFs31i, BFs31ll_BFs31ll_BFu31i_BFs31i)
//============================================================================


struct  BFs31ll_BFs31ll_BFu31i_BFs31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFu31i_BFs31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFs31ll_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFu31i_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFu31i_BFs31ll, BFs31ll_BFs31ll_BFu31i_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31ll_BFu31i_BFu31i  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFu31i_BFu31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFs31ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFu31i_BFu31i, BFs31ll_BFs31ll_BFu31i_BFu31i)
//============================================================================


struct  BFs31ll_BFs31ll_BFu31i_BFu31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFu31i_BFu31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFs31ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFu31i_BFu31ll, BFs31ll_BFs31ll_BFu31i_BFu31ll)
//============================================================================


struct  BFs31ll_BFs31ll_BFu31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFs31ll_BFs31ll_BFu31ll) C1{ FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFu31ll, BFs31ll_BFs31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFs31ll_BFu31ll_BFs31i  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFu31ll_BFs31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFs31ll_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFu31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFu31ll_BFs31i, BFs31ll_BFs31ll_BFu31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFs31ll_BFu31ll_BFs31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFu31ll_BFs31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFs31ll_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFu31ll_BFs31ll, BFs31ll_BFs31ll_BFu31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFs31ll_BFu31ll_BFu31i  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFu31ll_BFu31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFs31ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFu31ll_BFu31i, BFs31ll_BFs31ll_BFu31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFs31ll_BFu31ll_BFu31ll  {
  signed __tsi64 v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFs31ll_BFu31ll_BFu31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFs31ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFs31ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFs31ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFs31ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFs31ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFs31ll_BFs31ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFs31ll_BFu31ll_BFu31ll, BFs31ll_BFs31ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
};
//SIG(1 BFs31ll_BFu31i) C1{ FL:31 Fi:31}



static void Test_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i, BFs31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFu31i_BFs31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  signed int v3:31;
};
//SIG(1 BFs31ll_BFu31i_BFs31i) C1{ FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFu31i_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFs31i");
    static STRUCT_IF_C BFs31ll_BFu31i_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFs31i, BFs31ll_BFu31i_BFs31i)
//============================================================================


struct  BFs31ll_BFu31i_BFs31i_BFs31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFs31i_BFs31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFu31i_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFs31i_BFs31i");
    static STRUCT_IF_C BFs31ll_BFu31i_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFs31i_BFs31i, BFs31ll_BFu31i_BFs31i_BFs31i)
//============================================================================


struct  BFs31ll_BFu31i_BFs31i_BFs31ll  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFs31i_BFs31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31ll_BFu31i_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFu31i_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFs31i_BFs31ll, BFs31ll_BFu31i_BFs31i_BFs31ll)
//============================================================================


struct  BFs31ll_BFu31i_BFs31i_BFu31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFs31i_BFu31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFu31i_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFs31i_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31i_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFs31i_BFu31i, BFs31ll_BFu31i_BFs31i_BFu31i)
//============================================================================


struct  BFs31ll_BFu31i_BFs31i_BFu31ll  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFs31i_BFu31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31ll_BFu31i_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31i_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFs31i_BFu31ll, BFs31ll_BFu31i_BFs31i_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31i_BFs31ll  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFs31ll_BFu31i_BFs31ll) C1{ FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFu31i_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFs31ll, BFs31ll_BFu31i_BFs31ll)
//============================================================================


struct  BFs31ll_BFu31i_BFs31ll_BFs31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFs31ll_BFs31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31ll_BFu31i_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFu31i_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFs31ll_BFs31i, BFs31ll_BFu31i_BFs31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFu31i_BFs31ll_BFs31ll  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFs31ll_BFs31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFs31ll_BFu31i_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFu31i_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFs31ll_BFs31ll, BFs31ll_BFu31i_BFs31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFu31i_BFs31ll_BFu31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFs31ll_BFu31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31ll_BFu31i_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31i_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFs31ll_BFu31i, BFs31ll_BFu31i_BFs31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFu31i_BFs31ll_BFu31ll  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFs31ll_BFu31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFs31ll_BFu31i_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31i_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFs31ll_BFu31ll, BFs31ll_BFu31i_BFs31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31i_BFu31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFs31ll_BFu31i_BFu31i) C1{ FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFu31i, BFs31ll_BFu31i_BFu31i)
//============================================================================


struct  BFs31ll_BFu31i_BFu31i_BFs31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFu31i_BFs31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFu31i_BFu31i_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFu31i_BFs31i");
    static STRUCT_IF_C BFs31ll_BFu31i_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFu31i_BFs31i, BFs31ll_BFu31i_BFu31i_BFs31i)
//============================================================================


struct  BFs31ll_BFu31i_BFu31i_BFs31ll  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFu31i_BFs31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31ll_BFu31i_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFu31i_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFu31i_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFu31i_BFs31ll, BFs31ll_BFu31i_BFu31i_BFs31ll)
//============================================================================


struct  BFs31ll_BFu31i_BFu31i_BFu31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFu31i_BFu31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFu31i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFu31i_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFu31i_BFu31i, BFs31ll_BFu31i_BFu31i_BFu31i)
//============================================================================


struct  BFs31ll_BFu31i_BFu31i_BFu31ll  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFu31i_BFu31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFs31ll_BFu31i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFu31i_BFu31ll, BFs31ll_BFu31i_BFu31i_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31i_BFu31ll  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFs31ll_BFu31i_BFu31ll) C1{ FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFu31ll, BFs31ll_BFu31i_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31i_BFu31ll_BFs31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFu31ll_BFs31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31ll_BFu31i_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFu31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFu31i_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFu31ll_BFs31i, BFs31ll_BFu31i_BFu31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFu31i_BFu31ll_BFs31ll  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFu31ll_BFs31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFs31ll_BFu31i_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFu31i_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFu31ll_BFs31ll, BFs31ll_BFu31i_BFu31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFu31i_BFu31ll_BFu31i  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFu31ll_BFu31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFs31ll_BFu31i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFu31ll_BFu31i, BFs31ll_BFu31i_BFu31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFu31i_BFu31ll_BFu31ll  {
  signed __tsi64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFu31i_BFu31ll_BFu31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFs31ll_BFu31i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFs31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFs31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFs31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFs31ll_BFu31i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31i_BFu31ll_BFu31ll, BFs31ll_BFu31i_BFu31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
};
//SIG(1 BFs31ll_BFu31ll) C1{ FL:31 FL:31}



static void Test_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll, BFs31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31ll_BFs31i  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  signed int v3:31;
};
//SIG(1 BFs31ll_BFu31ll_BFs31i) C1{ FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFs31i, BFs31ll_BFu31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFu31ll_BFs31i_BFs31i  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFs31i_BFs31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFu31ll_BFs31i_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFs31i_BFs31i");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFs31i_BFs31i, BFs31ll_BFu31ll_BFs31i_BFs31i)
//============================================================================


struct  BFs31ll_BFu31ll_BFs31i_BFs31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFs31i_BFs31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFu31ll_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFs31i_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFs31i_BFs31ll, BFs31ll_BFu31ll_BFs31i_BFs31ll)
//============================================================================


struct  BFs31ll_BFu31ll_BFs31i_BFu31i  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFs31i_BFu31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFu31ll_BFs31i_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFs31i_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFs31i_BFu31i, BFs31ll_BFu31ll_BFs31i_BFu31i)
//============================================================================


struct  BFs31ll_BFu31ll_BFs31i_BFu31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFs31i_BFu31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFu31ll_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFs31i_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFs31i_BFu31ll, BFs31ll_BFu31ll_BFs31i_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31ll_BFs31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFs31ll_BFu31ll_BFs31ll) C1{ FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFs31ll, BFs31ll_BFu31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFu31ll_BFs31ll_BFs31i  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFs31ll_BFs31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFu31ll_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFs31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFs31ll_BFs31i, BFs31ll_BFu31ll_BFs31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFu31ll_BFs31ll_BFs31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFs31ll_BFs31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFu31ll_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFs31ll_BFs31ll, BFs31ll_BFu31ll_BFs31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFu31ll_BFs31ll_BFu31i  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFs31ll_BFu31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFu31ll_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFs31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFs31ll_BFu31i, BFs31ll_BFu31ll_BFs31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFu31ll_BFs31ll_BFu31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFs31ll_BFu31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFu31ll_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFs31ll_BFu31ll, BFs31ll_BFu31ll_BFs31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31ll_BFu31i  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFs31ll_BFu31ll_BFu31i) C1{ FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFu31i, BFs31ll_BFu31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFu31ll_BFu31i_BFs31i  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFu31i_BFs31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFu31ll_BFu31i_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFu31i_BFs31i");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFu31i_BFs31i, BFs31ll_BFu31ll_BFu31i_BFs31i)
//============================================================================


struct  BFs31ll_BFu31ll_BFu31i_BFs31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFu31i_BFs31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFu31ll_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFu31i_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFu31i_BFs31ll, BFs31ll_BFu31ll_BFu31i_BFs31ll)
//============================================================================


struct  BFs31ll_BFu31ll_BFu31i_BFu31i  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFu31i_BFu31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFs31ll_BFu31ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFu31i_BFu31i, BFs31ll_BFu31ll_BFu31i_BFu31i)
//============================================================================


struct  BFs31ll_BFu31ll_BFu31i_BFu31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFu31i_BFu31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFs31ll_BFu31ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFs31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFu31i_BFu31ll, BFs31ll_BFu31ll_BFu31i_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31ll_BFu31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFs31ll_BFu31ll_BFu31ll) C1{ FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs31ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFu31ll, BFs31ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFs31ll_BFu31ll_BFu31ll_BFs31i  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFu31ll_BFs31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFu31ll_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFu31ll_BFs31i");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFu31ll_BFs31i, BFs31ll_BFu31ll_BFu31ll_BFs31i)
//============================================================================


struct  BFs31ll_BFu31ll_BFu31ll_BFs31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFu31ll_BFs31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFu31ll_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFu31ll_BFs31ll, BFs31ll_BFu31ll_BFu31ll_BFs31ll)
//============================================================================


struct  BFs31ll_BFu31ll_BFu31ll_BFu31i  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFu31ll_BFu31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFs31ll_BFu31ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFu31ll_BFu31i, BFs31ll_BFu31ll_BFu31ll_BFu31i)
//============================================================================


struct  BFs31ll_BFu31ll_BFu31ll_BFu31ll  {
  signed __tsi64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFs31ll_BFu31ll_BFu31ll_BFu31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFs31ll_BFu31ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFs31ll_BFu31ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFs31ll_BFu31ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs31ll_BFu31ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs31ll_BFu31ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_sll(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFs31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFs31ll_BFu31ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs31ll_BFu31ll_BFu31ll_BFu31ll, BFs31ll_BFu31ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFs32i_BFs32i  {
  signed int v1:32;
  signed int v2:32;
};
//SIG(1 BFs32i_BFs32i) C1{ Fi:32 Fi:32}



static void Test_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32i lv;
    check2(sizeof(lv), 8, "sizeof(BFs32i_BFs32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i, BFs32i_BFs32i)
//============================================================================


struct  BFs32i_BFs32i_BFs32i  {
  signed int v1:32;
  signed int v2:32;
  signed int v3:32;
};
//SIG(1 BFs32i_BFs32i_BFs32i) C1{ Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32i_BFs32i lv;
    check2(sizeof(lv), 12, "sizeof(BFs32i_BFs32i_BFs32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFs32i, BFs32i_BFs32i_BFs32i)
//============================================================================


struct  BFs32i_BFs32i_BFs32i_BFs32i  {
  signed int v1:32;
  signed int v2:32;
  signed int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFs32i_BFs32i_BFs32i) C1{ Fi:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFs32i_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32i_BFs32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32i_BFs32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFs32i_BFs32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFs32i_BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFs32i_BFs32i, BFs32i_BFs32i_BFs32i_BFs32i)
//============================================================================


struct  BFs32i_BFs32i_BFs32i_BFs32ll  {
  signed int v1:32;
  signed int v2:32;
  signed int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFs32i_BFs32i_BFs32ll) C1{ Fi:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFs32i_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32i_BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32i_BFs32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFs32i_BFs32ll, BFs32i_BFs32i_BFs32i_BFs32ll)
//============================================================================


struct  BFs32i_BFs32i_BFs32i_BFu32i  {
  signed int v1:32;
  signed int v2:32;
  signed int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFs32i_BFs32i_BFu32i) C1{ Fi:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFs32i_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFs32i_BFs32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFs32i_BFs32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFs32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFs32i_BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFs32i_BFu32i, BFs32i_BFs32i_BFs32i_BFu32i)
//============================================================================


struct  BFs32i_BFs32i_BFs32i_BFu32ll  {
  signed int v1:32;
  signed int v2:32;
  signed int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFs32i_BFs32i_BFu32ll) C1{ Fi:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFs32i_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFs32i_BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFs32i_BFs32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFs32i_BFu32ll, BFs32i_BFs32i_BFs32i_BFu32ll)
//============================================================================


struct  BFs32i_BFs32i_BFs32ll  {
  signed int v1:32;
  signed int v2:32;
  signed __tsi64 v3:32;
};
//SIG(1 BFs32i_BFs32i_BFs32ll) C1{ Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32i_BFs32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFs32ll, BFs32i_BFs32i_BFs32ll)
//============================================================================


struct  BFs32i_BFs32i_BFs32ll_BFs32i  {
  signed int v1:32;
  signed int v2:32;
  signed __tsi64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFs32i_BFs32ll_BFs32i) C1{ Fi:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFs32i_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32i_BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32i_BFs32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFs32ll_BFs32i, BFs32i_BFs32i_BFs32ll_BFs32i)
//============================================================================


struct  BFs32i_BFs32i_BFs32ll_BFs32ll  {
  signed int v1:32;
  signed int v2:32;
  signed __tsi64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFs32i_BFs32ll_BFs32ll) C1{ Fi:32 Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFs32i_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32i_BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32i_BFs32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFs32ll_BFs32ll, BFs32i_BFs32i_BFs32ll_BFs32ll)
//============================================================================


struct  BFs32i_BFs32i_BFs32ll_BFu32i  {
  signed int v1:32;
  signed int v2:32;
  signed __tsi64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFs32i_BFs32ll_BFu32i) C1{ Fi:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFs32i_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32i_BFs32i_BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32i_BFs32i_BFs32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFs32ll_BFu32i, BFs32i_BFs32i_BFs32ll_BFu32i)
//============================================================================


struct  BFs32i_BFs32i_BFs32ll_BFu32ll  {
  signed int v1:32;
  signed int v2:32;
  signed __tsi64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFs32i_BFs32ll_BFu32ll) C1{ Fi:32 Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFs32i_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFs32i_BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32i_BFs32i_BFs32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFs32ll_BFu32ll, BFs32i_BFs32i_BFs32ll_BFu32ll)
//============================================================================


struct  BFs32i_BFs32i_BFu32i  {
  signed int v1:32;
  signed int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFs32i_BFs32i_BFu32i) C1{ Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFs32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFs32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFs32i_BFs32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFu32i, BFs32i_BFs32i_BFu32i)
//============================================================================


struct  BFs32i_BFs32i_BFu32i_BFs32i  {
  signed int v1:32;
  signed int v2:32;
  unsigned int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFs32i_BFu32i_BFs32i) C1{ Fi:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFs32i_BFu32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32i_BFu32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32i_BFu32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFu32i_BFs32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFs32i_BFu32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFu32i_BFs32i, BFs32i_BFs32i_BFu32i_BFs32i)
//============================================================================


struct  BFs32i_BFs32i_BFu32i_BFs32ll  {
  signed int v1:32;
  signed int v2:32;
  unsigned int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFs32i_BFu32i_BFs32ll) C1{ Fi:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFs32i_BFu32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32i_BFu32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32i_BFu32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFu32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFu32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFu32i_BFs32ll, BFs32i_BFs32i_BFu32i_BFs32ll)
//============================================================================


struct  BFs32i_BFs32i_BFu32i_BFu32i  {
  signed int v1:32;
  signed int v2:32;
  unsigned int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFs32i_BFu32i_BFu32i) C1{ Fi:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFs32i_BFu32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFs32i_BFu32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFs32i_BFu32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFs32i_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFu32i_BFu32i, BFs32i_BFs32i_BFu32i_BFu32i)
//============================================================================


struct  BFs32i_BFs32i_BFu32i_BFu32ll  {
  signed int v1:32;
  signed int v2:32;
  unsigned int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFs32i_BFu32i_BFu32ll) C1{ Fi:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFs32i_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFs32i_BFu32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFs32i_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFu32i_BFu32ll, BFs32i_BFs32i_BFu32i_BFu32ll)
//============================================================================


struct  BFs32i_BFs32i_BFu32ll  {
  signed int v1:32;
  signed int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFs32i_BFs32i_BFu32ll) C1{ Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFs32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFu32ll, BFs32i_BFs32i_BFu32ll)
//============================================================================


struct  BFs32i_BFs32i_BFu32ll_BFs32i  {
  signed int v1:32;
  signed int v2:32;
  __tsu64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFs32i_BFu32ll_BFs32i) C1{ Fi:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFs32i_BFu32ll_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32i_BFu32ll_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32i_BFu32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFu32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFu32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFu32ll_BFs32i, BFs32i_BFs32i_BFu32ll_BFs32i)
//============================================================================


struct  BFs32i_BFs32i_BFu32ll_BFs32ll  {
  signed int v1:32;
  signed int v2:32;
  __tsu64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFs32i_BFu32ll_BFs32ll) C1{ Fi:32 Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFs32i_BFu32ll_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32i_BFu32ll_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32i_BFu32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFu32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFu32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFu32ll_BFs32ll, BFs32i_BFs32i_BFu32ll_BFs32ll)
//============================================================================


struct  BFs32i_BFs32i_BFu32ll_BFu32i  {
  signed int v1:32;
  signed int v2:32;
  __tsu64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFs32i_BFu32ll_BFu32i) C1{ Fi:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFs32i_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFs32i_BFs32i_BFu32ll_BFu32i");
    static STRUCT_IF_C BFs32i_BFs32i_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFu32ll_BFu32i, BFs32i_BFs32i_BFu32ll_BFu32i)
//============================================================================


struct  BFs32i_BFs32i_BFu32ll_BFu32ll  {
  signed int v1:32;
  signed int v2:32;
  __tsu64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFs32i_BFu32ll_BFu32ll) C1{ Fi:32 Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFs32i_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFs32i_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFs32i_BFs32i_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32i_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32i_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32i_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32i_BFu32ll_BFu32ll, BFs32i_BFs32i_BFu32ll_BFu32ll)
//============================================================================


struct  BFs32i_BFs32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
};
//SIG(1 BFs32i_BFs32ll) C1{ Fi:32 FL:32}



static void Test_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll, BFs32i_BFs32ll)
//============================================================================


struct  BFs32i_BFs32ll_BFs32i  {
  signed int v1:32;
  signed __tsi64 v2:32;
  signed int v3:32;
};
//SIG(1 BFs32i_BFs32ll_BFs32i) C1{ Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32ll_BFs32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFs32i, BFs32i_BFs32ll_BFs32i)
//============================================================================


struct  BFs32i_BFs32ll_BFs32i_BFs32i  {
  signed int v1:32;
  signed __tsi64 v2:32;
  signed int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFs32i_BFs32i) C1{ Fi:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32i_BFs32ll_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFs32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32ll_BFs32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFs32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFs32i_BFs32i, BFs32i_BFs32ll_BFs32i_BFs32i)
//============================================================================


struct  BFs32i_BFs32ll_BFs32i_BFs32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
  signed int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFs32i_BFs32ll) C1{ Fi:32 FL:32 Fi:32 FL:32}



static void Test_BFs32i_BFs32ll_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32ll_BFs32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFs32i_BFs32ll, BFs32i_BFs32ll_BFs32i_BFs32ll)
//============================================================================


struct  BFs32i_BFs32ll_BFs32i_BFu32i  {
  signed int v1:32;
  signed __tsi64 v2:32;
  signed int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFs32i_BFu32i) C1{ Fi:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32i_BFs32ll_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFs32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFs32ll_BFs32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFs32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFs32i_BFu32i, BFs32i_BFs32ll_BFs32i_BFu32i)
//============================================================================


struct  BFs32i_BFs32ll_BFs32i_BFu32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
  signed int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFs32i_BFu32ll) C1{ Fi:32 FL:32 Fi:32 FL:32}



static void Test_BFs32i_BFs32ll_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFs32ll_BFs32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFs32i_BFu32ll, BFs32i_BFs32ll_BFs32i_BFu32ll)
//============================================================================


struct  BFs32i_BFs32ll_BFs32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
  signed __tsi64 v3:32;
};
//SIG(1 BFs32i_BFs32ll_BFs32ll) C1{ Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32ll_BFs32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFs32ll, BFs32i_BFs32ll_BFs32ll)
//============================================================================


struct  BFs32i_BFs32ll_BFs32ll_BFs32i  {
  signed int v1:32;
  signed __tsi64 v2:32;
  signed __tsi64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFs32ll_BFs32i) C1{ Fi:32 FL:32 FL:32 Fi:32}



static void Test_BFs32i_BFs32ll_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32ll_BFs32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFs32ll_BFs32i, BFs32i_BFs32ll_BFs32ll_BFs32i)
//============================================================================


struct  BFs32i_BFs32ll_BFs32ll_BFs32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
  signed __tsi64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFs32ll_BFs32ll) C1{ Fi:32 FL:32 FL:32 FL:32}



static void Test_BFs32i_BFs32ll_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32ll_BFs32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFs32ll_BFs32ll, BFs32i_BFs32ll_BFs32ll_BFs32ll)
//============================================================================


struct  BFs32i_BFs32ll_BFs32ll_BFu32i  {
  signed int v1:32;
  signed __tsi64 v2:32;
  signed __tsi64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFs32ll_BFu32i) C1{ Fi:32 FL:32 FL:32 Fi:32}



static void Test_BFs32i_BFs32ll_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32i_BFs32ll_BFs32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFs32ll_BFu32i, BFs32i_BFs32ll_BFs32ll_BFu32i)
//============================================================================


struct  BFs32i_BFs32ll_BFs32ll_BFu32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
  signed __tsi64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFs32ll_BFu32ll) C1{ Fi:32 FL:32 FL:32 FL:32}



static void Test_BFs32i_BFs32ll_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32i_BFs32ll_BFs32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFs32ll_BFu32ll, BFs32i_BFs32ll_BFs32ll_BFu32ll)
//============================================================================


struct  BFs32i_BFs32ll_BFu32i  {
  signed int v1:32;
  signed __tsi64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFs32i_BFs32ll_BFu32i) C1{ Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32i_BFs32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFu32i, BFs32i_BFs32ll_BFu32i)
//============================================================================


struct  BFs32i_BFs32ll_BFu32i_BFs32i  {
  signed int v1:32;
  signed __tsi64 v2:32;
  unsigned int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFu32i_BFs32i) C1{ Fi:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32i_BFs32ll_BFu32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFu32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32ll_BFu32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFu32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFu32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFu32i_BFs32i, BFs32i_BFs32ll_BFu32i_BFs32i)
//============================================================================


struct  BFs32i_BFs32ll_BFu32i_BFs32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
  unsigned int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFu32i_BFs32ll) C1{ Fi:32 FL:32 Fi:32 FL:32}



static void Test_BFs32i_BFs32ll_BFu32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFu32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32ll_BFu32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFu32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFu32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFu32i_BFs32ll, BFs32i_BFs32ll_BFu32i_BFs32ll)
//============================================================================


struct  BFs32i_BFs32ll_BFu32i_BFu32i  {
  signed int v1:32;
  signed __tsi64 v2:32;
  unsigned int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFu32i_BFu32i) C1{ Fi:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32i_BFs32ll_BFu32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFu32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFs32ll_BFu32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFu32i_BFu32i, BFs32i_BFs32ll_BFu32i_BFu32i)
//============================================================================


struct  BFs32i_BFs32ll_BFu32i_BFu32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
  unsigned int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFu32i_BFu32ll) C1{ Fi:32 FL:32 Fi:32 FL:32}



static void Test_BFs32i_BFs32ll_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFu32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFs32ll_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFu32i_BFu32ll, BFs32i_BFs32ll_BFu32i_BFu32ll)
//============================================================================


struct  BFs32i_BFs32ll_BFu32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFs32i_BFs32ll_BFu32ll) C1{ Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32i_BFs32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFu32ll, BFs32i_BFs32ll_BFu32ll)
//============================================================================


struct  BFs32i_BFs32ll_BFu32ll_BFs32i  {
  signed int v1:32;
  signed __tsi64 v2:32;
  __tsu64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFu32ll_BFs32i) C1{ Fi:32 FL:32 FL:32 Fi:32}



static void Test_BFs32i_BFs32ll_BFu32ll_BFs32i()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFu32ll_BFs32i");
    static STRUCT_IF_C BFs32i_BFs32ll_BFu32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFu32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFu32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFu32ll_BFs32i, BFs32i_BFs32ll_BFu32ll_BFs32i)
//============================================================================


struct  BFs32i_BFs32ll_BFu32ll_BFs32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
  __tsu64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFu32ll_BFs32ll) C1{ Fi:32 FL:32 FL:32 FL:32}



static void Test_BFs32i_BFs32ll_BFu32ll_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFu32ll_BFs32ll");
    static STRUCT_IF_C BFs32i_BFs32ll_BFu32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFu32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFu32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFu32ll_BFs32ll, BFs32i_BFs32ll_BFu32ll_BFs32ll)
//============================================================================


struct  BFs32i_BFs32ll_BFu32ll_BFu32i  {
  signed int v1:32;
  signed __tsi64 v2:32;
  __tsu64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFu32ll_BFu32i) C1{ Fi:32 FL:32 FL:32 Fi:32}



static void Test_BFs32i_BFs32ll_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFu32ll_BFu32i");
    static STRUCT_IF_C BFs32i_BFs32ll_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFu32ll_BFu32i, BFs32i_BFs32ll_BFu32ll_BFu32i)
//============================================================================


struct  BFs32i_BFs32ll_BFu32ll_BFu32ll  {
  signed int v1:32;
  signed __tsi64 v2:32;
  __tsu64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFs32ll_BFu32ll_BFu32ll) C1{ Fi:32 FL:32 FL:32 FL:32}



static void Test_BFs32i_BFs32ll_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFs32ll_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFs32i_BFs32ll_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFs32ll_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFs32ll_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFs32ll_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFs32ll_BFu32ll_BFu32ll, BFs32i_BFs32ll_BFu32ll_BFu32ll)
//============================================================================


struct  BFs32i_BFu32i  {
  signed int v1:32;
  unsigned int v2:32;
};
//SIG(1 BFs32i_BFu32i) C1{ Fi:32 Fi:32}



static void Test_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFs32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i, BFs32i_BFu32i)
//============================================================================


struct  BFs32i_BFu32i_BFs32i  {
  signed int v1:32;
  unsigned int v2:32;
  signed int v3:32;
};
//SIG(1 BFs32i_BFu32i_BFs32i) C1{ Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFu32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFu32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFu32i_BFs32i lv;
    check2(sizeof(lv), 12, "sizeof(BFs32i_BFu32i_BFs32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFu32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFs32i, BFs32i_BFu32i_BFs32i)
//============================================================================


struct  BFs32i_BFu32i_BFs32i_BFs32i  {
  signed int v1:32;
  unsigned int v2:32;
  signed int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFu32i_BFs32i_BFs32i) C1{ Fi:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFu32i_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFu32i_BFs32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFu32i_BFs32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFs32i_BFs32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFu32i_BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFs32i_BFs32i, BFs32i_BFu32i_BFs32i_BFs32i)
//============================================================================


struct  BFs32i_BFu32i_BFs32i_BFs32ll  {
  signed int v1:32;
  unsigned int v2:32;
  signed int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFu32i_BFs32i_BFs32ll) C1{ Fi:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFu32i_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFu32i_BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFu32i_BFs32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFs32i_BFs32ll, BFs32i_BFu32i_BFs32i_BFs32ll)
//============================================================================


struct  BFs32i_BFu32i_BFs32i_BFu32i  {
  signed int v1:32;
  unsigned int v2:32;
  signed int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFu32i_BFs32i_BFu32i) C1{ Fi:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFu32i_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32i_BFs32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32i_BFs32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFs32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFu32i_BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFs32i_BFu32i, BFs32i_BFu32i_BFs32i_BFu32i)
//============================================================================


struct  BFs32i_BFu32i_BFs32i_BFu32ll  {
  signed int v1:32;
  unsigned int v2:32;
  signed int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFu32i_BFs32i_BFu32ll) C1{ Fi:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFu32i_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32i_BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32i_BFs32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFs32i_BFu32ll, BFs32i_BFu32i_BFs32i_BFu32ll)
//============================================================================


struct  BFs32i_BFu32i_BFs32ll  {
  signed int v1:32;
  unsigned int v2:32;
  signed __tsi64 v3:32;
};
//SIG(1 BFs32i_BFu32i_BFs32ll) C1{ Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFu32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFu32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFu32i_BFs32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFu32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFs32ll, BFs32i_BFu32i_BFs32ll)
//============================================================================


struct  BFs32i_BFu32i_BFs32ll_BFs32i  {
  signed int v1:32;
  unsigned int v2:32;
  signed __tsi64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFu32i_BFs32ll_BFs32i) C1{ Fi:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFu32i_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32i_BFu32i_BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32i_BFu32i_BFs32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFs32ll_BFs32i, BFs32i_BFu32i_BFs32ll_BFs32i)
//============================================================================


struct  BFs32i_BFu32i_BFs32ll_BFs32ll  {
  signed int v1:32;
  unsigned int v2:32;
  signed __tsi64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFu32i_BFs32ll_BFs32ll) C1{ Fi:32 Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFu32i_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFu32i_BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32i_BFu32i_BFs32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFs32ll_BFs32ll, BFs32i_BFu32i_BFs32ll_BFs32ll)
//============================================================================


struct  BFs32i_BFu32i_BFs32ll_BFu32i  {
  signed int v1:32;
  unsigned int v2:32;
  signed __tsi64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFu32i_BFs32ll_BFu32i) C1{ Fi:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFu32i_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32i_BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32i_BFs32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFs32ll_BFu32i, BFs32i_BFu32i_BFs32ll_BFu32i)
//============================================================================


struct  BFs32i_BFu32i_BFs32ll_BFu32ll  {
  signed int v1:32;
  unsigned int v2:32;
  signed __tsi64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFu32i_BFs32ll_BFu32ll) C1{ Fi:32 Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFu32i_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32i_BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32i_BFs32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFs32ll_BFu32ll, BFs32i_BFu32i_BFs32ll_BFu32ll)
//============================================================================


struct  BFs32i_BFu32i_BFu32i  {
  signed int v1:32;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFs32i_BFu32i_BFu32i) C1{ Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFu32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFs32i_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFu32i, BFs32i_BFu32i_BFu32i)
//============================================================================


struct  BFs32i_BFu32i_BFu32i_BFs32i  {
  signed int v1:32;
  unsigned int v2:32;
  unsigned int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFu32i_BFu32i_BFs32i) C1{ Fi:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFu32i_BFu32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFu32i_BFu32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFu32i_BFu32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFu32i_BFs32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFu32i_BFu32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFu32i_BFs32i, BFs32i_BFu32i_BFu32i_BFs32i)
//============================================================================


struct  BFs32i_BFu32i_BFu32i_BFs32ll  {
  signed int v1:32;
  unsigned int v2:32;
  unsigned int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFu32i_BFu32i_BFs32ll) C1{ Fi:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFu32i_BFu32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFu32i_BFu32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFu32i_BFu32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFu32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFu32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFu32i_BFs32ll, BFs32i_BFu32i_BFu32i_BFs32ll)
//============================================================================


struct  BFs32i_BFu32i_BFu32i_BFu32i  {
  signed int v1:32;
  unsigned int v2:32;
  unsigned int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFu32i_BFu32i_BFu32i) C1{ Fi:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32i_BFu32i_BFu32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32i_BFu32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32i_BFu32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs32i_BFu32i_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFu32i_BFu32i, BFs32i_BFu32i_BFu32i_BFu32i)
//============================================================================


struct  BFs32i_BFu32i_BFu32i_BFu32ll  {
  signed int v1:32;
  unsigned int v2:32;
  unsigned int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFu32i_BFu32i_BFu32ll) C1{ Fi:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFu32i_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32i_BFu32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32i_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFu32i_BFu32ll, BFs32i_BFu32i_BFu32i_BFu32ll)
//============================================================================


struct  BFs32i_BFu32i_BFu32ll  {
  signed int v1:32;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFs32i_BFu32i_BFu32ll) C1{ Fi:32 Fi:32 FL:32}



static void Test_BFs32i_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFu32ll, BFs32i_BFu32i_BFu32ll)
//============================================================================


struct  BFs32i_BFu32i_BFu32ll_BFs32i  {
  signed int v1:32;
  unsigned int v2:32;
  __tsu64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFu32i_BFu32ll_BFs32i) C1{ Fi:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFu32i_BFu32ll_BFs32i()
{
  {
    init_simple_test("BFs32i_BFu32i_BFu32ll_BFs32i");
    static STRUCT_IF_C BFs32i_BFu32i_BFu32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFu32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFu32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFu32ll_BFs32i, BFs32i_BFu32i_BFu32ll_BFs32i)
//============================================================================


struct  BFs32i_BFu32i_BFu32ll_BFs32ll  {
  signed int v1:32;
  unsigned int v2:32;
  __tsu64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFu32i_BFu32ll_BFs32ll) C1{ Fi:32 Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFu32i_BFu32ll_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFu32i_BFu32ll_BFs32ll");
    static STRUCT_IF_C BFs32i_BFu32i_BFu32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFu32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFu32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFu32ll_BFs32ll, BFs32i_BFu32i_BFu32ll_BFs32ll)
//============================================================================


struct  BFs32i_BFu32i_BFu32ll_BFu32i  {
  signed int v1:32;
  unsigned int v2:32;
  __tsu64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFu32i_BFu32ll_BFu32i) C1{ Fi:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFu32i_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32i_BFu32ll_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32i_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFu32ll_BFu32i, BFs32i_BFu32i_BFu32ll_BFu32i)
//============================================================================


struct  BFs32i_BFu32i_BFu32ll_BFu32ll  {
  signed int v1:32;
  unsigned int v2:32;
  __tsu64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFu32i_BFu32ll_BFu32ll) C1{ Fi:32 Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFu32i_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32i_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32i_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32i_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32i_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32i_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32i_BFu32ll_BFu32ll, BFs32i_BFu32i_BFu32ll_BFu32ll)
//============================================================================


struct  BFs32i_BFu32ll  {
  signed int v1:32;
  __tsu64 v2:32;
};
//SIG(1 BFs32i_BFu32ll) C1{ Fi:32 FL:32}



static void Test_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll, BFs32i_BFu32ll)
//============================================================================


struct  BFs32i_BFu32ll_BFs32i  {
  signed int v1:32;
  __tsu64 v2:32;
  signed int v3:32;
};
//SIG(1 BFs32i_BFu32ll_BFs32i) C1{ Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFu32ll_BFs32i()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFs32i");
    static STRUCT_IF_C BFs32i_BFu32ll_BFs32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFu32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFs32i, BFs32i_BFu32ll_BFs32i)
//============================================================================


struct  BFs32i_BFu32ll_BFs32i_BFs32i  {
  signed int v1:32;
  __tsu64 v2:32;
  signed int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFs32i_BFs32i) C1{ Fi:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32i_BFu32ll_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFs32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFu32ll_BFs32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFs32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFs32i_BFs32i, BFs32i_BFu32ll_BFs32i_BFs32i)
//============================================================================


struct  BFs32i_BFu32ll_BFs32i_BFs32ll  {
  signed int v1:32;
  __tsu64 v2:32;
  signed int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFs32i_BFs32ll) C1{ Fi:32 FL:32 Fi:32 FL:32}



static void Test_BFs32i_BFu32ll_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFu32ll_BFs32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFs32i_BFs32ll, BFs32i_BFu32ll_BFs32i_BFs32ll)
//============================================================================


struct  BFs32i_BFu32ll_BFs32i_BFu32i  {
  signed int v1:32;
  __tsu64 v2:32;
  signed int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFs32i_BFu32i) C1{ Fi:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32i_BFu32ll_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFs32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32ll_BFs32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFs32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFs32i_BFu32i, BFs32i_BFu32ll_BFs32i_BFu32i)
//============================================================================


struct  BFs32i_BFu32ll_BFs32i_BFu32ll  {
  signed int v1:32;
  __tsu64 v2:32;
  signed int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFs32i_BFu32ll) C1{ Fi:32 FL:32 Fi:32 FL:32}



static void Test_BFs32i_BFu32ll_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32ll_BFs32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFs32i_BFu32ll, BFs32i_BFu32ll_BFs32i_BFu32ll)
//============================================================================


struct  BFs32i_BFu32ll_BFs32ll  {
  signed int v1:32;
  __tsu64 v2:32;
  signed __tsi64 v3:32;
};
//SIG(1 BFs32i_BFu32ll_BFs32ll) C1{ Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFu32ll_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFs32ll");
    static STRUCT_IF_C BFs32i_BFu32ll_BFs32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFu32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFs32ll, BFs32i_BFu32ll_BFs32ll)
//============================================================================


struct  BFs32i_BFu32ll_BFs32ll_BFs32i  {
  signed int v1:32;
  __tsu64 v2:32;
  signed __tsi64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFs32ll_BFs32i) C1{ Fi:32 FL:32 FL:32 Fi:32}



static void Test_BFs32i_BFu32ll_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32i_BFu32ll_BFs32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFs32ll_BFs32i, BFs32i_BFu32ll_BFs32ll_BFs32i)
//============================================================================


struct  BFs32i_BFu32ll_BFs32ll_BFs32ll  {
  signed int v1:32;
  __tsu64 v2:32;
  signed __tsi64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFs32ll_BFs32ll) C1{ Fi:32 FL:32 FL:32 FL:32}



static void Test_BFs32i_BFu32ll_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32i_BFu32ll_BFs32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFs32ll_BFs32ll, BFs32i_BFu32ll_BFs32ll_BFs32ll)
//============================================================================


struct  BFs32i_BFu32ll_BFs32ll_BFu32i  {
  signed int v1:32;
  __tsu64 v2:32;
  signed __tsi64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFs32ll_BFu32i) C1{ Fi:32 FL:32 FL:32 Fi:32}



static void Test_BFs32i_BFu32ll_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32ll_BFs32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFs32ll_BFu32i, BFs32i_BFu32ll_BFs32ll_BFu32i)
//============================================================================


struct  BFs32i_BFu32ll_BFs32ll_BFu32ll  {
  signed int v1:32;
  __tsu64 v2:32;
  signed __tsi64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFs32ll_BFu32ll) C1{ Fi:32 FL:32 FL:32 FL:32}



static void Test_BFs32i_BFu32ll_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32ll_BFs32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFs32ll_BFu32ll, BFs32i_BFu32ll_BFs32ll_BFu32ll)
//============================================================================


struct  BFs32i_BFu32ll_BFu32i  {
  signed int v1:32;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFs32i_BFu32ll_BFu32i) C1{ Fi:32 FL:32 Fi:32}



static void Test_BFs32i_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFu32i, BFs32i_BFu32ll_BFu32i)
//============================================================================


struct  BFs32i_BFu32ll_BFu32i_BFs32i  {
  signed int v1:32;
  __tsu64 v2:32;
  unsigned int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFu32i_BFs32i) C1{ Fi:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32i_BFu32ll_BFu32i_BFs32i()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFu32i_BFs32i");
    static STRUCT_IF_C BFs32i_BFu32ll_BFu32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFu32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFu32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFu32i_BFs32i, BFs32i_BFu32ll_BFu32i_BFs32i)
//============================================================================


struct  BFs32i_BFu32ll_BFu32i_BFs32ll  {
  signed int v1:32;
  __tsu64 v2:32;
  unsigned int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFu32i_BFs32ll) C1{ Fi:32 FL:32 Fi:32 FL:32}



static void Test_BFs32i_BFu32ll_BFu32i_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFu32i_BFs32ll");
    static STRUCT_IF_C BFs32i_BFu32ll_BFu32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFu32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFu32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFu32i_BFs32ll, BFs32i_BFu32ll_BFu32i_BFs32ll)
//============================================================================


struct  BFs32i_BFu32ll_BFu32i_BFu32i  {
  signed int v1:32;
  __tsu64 v2:32;
  unsigned int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFu32i_BFu32i) C1{ Fi:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32i_BFu32ll_BFu32i_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFu32i_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32ll_BFu32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFu32i_BFu32i, BFs32i_BFu32ll_BFu32i_BFu32i)
//============================================================================


struct  BFs32i_BFu32ll_BFu32i_BFu32ll  {
  signed int v1:32;
  __tsu64 v2:32;
  unsigned int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFu32i_BFu32ll) C1{ Fi:32 FL:32 Fi:32 FL:32}



static void Test_BFs32i_BFu32ll_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFu32i_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32ll_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFu32i_BFu32ll, BFs32i_BFu32ll_BFu32i_BFu32ll)
//============================================================================


struct  BFs32i_BFu32ll_BFu32ll  {
  signed int v1:32;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFs32i_BFu32ll_BFu32ll) C1{ Fi:32 FL:32 FL:32}



static void Test_BFs32i_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32i_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFu32ll, BFs32i_BFu32ll_BFu32ll)
//============================================================================


struct  BFs32i_BFu32ll_BFu32ll_BFs32i  {
  signed int v1:32;
  __tsu64 v2:32;
  __tsu64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFu32ll_BFs32i) C1{ Fi:32 FL:32 FL:32 Fi:32}



static void Test_BFs32i_BFu32ll_BFu32ll_BFs32i()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFu32ll_BFs32i");
    static STRUCT_IF_C BFs32i_BFu32ll_BFu32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFu32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFu32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFu32ll_BFs32i, BFs32i_BFu32ll_BFu32ll_BFs32i)
//============================================================================


struct  BFs32i_BFu32ll_BFu32ll_BFs32ll  {
  signed int v1:32;
  __tsu64 v2:32;
  __tsu64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFu32ll_BFs32ll) C1{ Fi:32 FL:32 FL:32 FL:32}



static void Test_BFs32i_BFu32ll_BFu32ll_BFs32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFu32ll_BFs32ll");
    static STRUCT_IF_C BFs32i_BFu32ll_BFu32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFu32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFu32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFu32ll_BFs32ll, BFs32i_BFu32ll_BFu32ll_BFs32ll)
//============================================================================


struct  BFs32i_BFu32ll_BFu32ll_BFu32i  {
  signed int v1:32;
  __tsu64 v2:32;
  __tsu64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFu32ll_BFu32i) C1{ Fi:32 FL:32 FL:32 Fi:32}



static void Test_BFs32i_BFu32ll_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFu32ll_BFu32i");
    static STRUCT_IF_C BFs32i_BFu32ll_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFu32ll_BFu32i, BFs32i_BFu32ll_BFu32ll_BFu32i)
//============================================================================


struct  BFs32i_BFu32ll_BFu32ll_BFu32ll  {
  signed int v1:32;
  __tsu64 v2:32;
  __tsu64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32i_BFu32ll_BFu32ll_BFu32ll) C1{ Fi:32 FL:32 FL:32 FL:32}



static void Test_BFs32i_BFu32ll_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFs32i_BFu32ll_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFs32i_BFu32ll_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32i_BFu32ll_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32i_BFu32ll_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32i_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32i_BFu32ll_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32i_BFu32ll_BFu32ll_BFu32ll, BFs32i_BFu32ll_BFu32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFs32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
};
//SIG(1 BFs32ll_BFs32i) C1{ FL:32 Fi:32}



static void Test_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32i lv;
    check2(sizeof(lv), 8, "sizeof(BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i, BFs32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFs32i_BFs32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
  signed int v3:32;
};
//SIG(1 BFs32ll_BFs32i_BFs32i) C1{ FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32i_BFs32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFs32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFs32i, BFs32ll_BFs32i_BFs32i)
//============================================================================


struct  BFs32ll_BFs32i_BFs32i_BFs32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
  signed int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFs32i_BFs32i) C1{ FL:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFs32i_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFs32i_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32i_BFs32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFs32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFs32i_BFs32i, BFs32ll_BFs32i_BFs32i_BFs32i)
//============================================================================


struct  BFs32ll_BFs32i_BFs32i_BFs32ll  {
  signed __tsi64 v1:32;
  signed int v2:32;
  signed int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFs32i_BFs32ll) C1{ FL:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32ll_BFs32i_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32i_BFs32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFs32i_BFs32ll, BFs32ll_BFs32i_BFs32i_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32i_BFs32i_BFu32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
  signed int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFs32i_BFu32i) C1{ FL:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFs32i_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFs32i_BFu32i");
    static STRUCT_IF_C BFs32ll_BFs32i_BFs32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFs32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFs32i_BFu32i, BFs32ll_BFs32i_BFs32i_BFu32i)
//============================================================================


struct  BFs32ll_BFs32i_BFs32i_BFu32ll  {
  signed __tsi64 v1:32;
  signed int v2:32;
  signed int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFs32i_BFu32ll) C1{ FL:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32ll_BFs32i_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFs32i_BFs32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFs32i_BFu32ll, BFs32ll_BFs32i_BFs32i_BFu32ll)
//============================================================================


struct  BFs32ll_BFs32i_BFs32ll  {
  signed __tsi64 v1:32;
  signed int v2:32;
  signed __tsi64 v3:32;
};
//SIG(1 BFs32ll_BFs32i_BFs32ll) C1{ FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32i_BFs32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFs32ll, BFs32ll_BFs32i_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32i_BFs32ll_BFs32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
  signed __tsi64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFs32ll_BFs32i) C1{ FL:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32ll_BFs32i_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32i_BFs32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFs32ll_BFs32i, BFs32ll_BFs32i_BFs32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFs32i_BFs32ll_BFs32ll  {
  signed __tsi64 v1:32;
  signed int v2:32;
  signed __tsi64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFs32ll_BFs32ll) C1{ FL:32 Fi:32 FL:32 FL:32}



static void Test_BFs32ll_BFs32i_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32i_BFs32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFs32ll_BFs32ll, BFs32ll_BFs32i_BFs32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32i_BFs32ll_BFu32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
  signed __tsi64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFs32ll_BFu32i) C1{ FL:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32ll_BFs32i_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFs32i_BFs32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFs32ll_BFu32i, BFs32ll_BFs32i_BFs32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFs32i_BFs32ll_BFu32ll  {
  signed __tsi64 v1:32;
  signed int v2:32;
  signed __tsi64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFs32ll_BFu32ll) C1{ FL:32 Fi:32 FL:32 FL:32}



static void Test_BFs32ll_BFs32i_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFs32i_BFs32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFs32ll_BFu32ll, BFs32ll_BFs32i_BFs32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFs32i_BFu32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFs32ll_BFs32i_BFu32i) C1{ FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFu32i");
    static STRUCT_IF_C BFs32ll_BFs32i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFs32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFu32i, BFs32ll_BFs32i_BFu32i)
//============================================================================


struct  BFs32ll_BFs32i_BFu32i_BFs32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
  unsigned int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFu32i_BFs32i) C1{ FL:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFs32i_BFu32i_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFu32i_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32i_BFu32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFu32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFu32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFu32i_BFs32i, BFs32ll_BFs32i_BFu32i_BFs32i)
//============================================================================


struct  BFs32ll_BFs32i_BFu32i_BFs32ll  {
  signed __tsi64 v1:32;
  signed int v2:32;
  unsigned int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFu32i_BFs32ll) C1{ FL:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32ll_BFs32i_BFu32i_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFu32i_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32i_BFu32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFu32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFu32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFu32i_BFs32ll, BFs32ll_BFs32i_BFu32i_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32i_BFu32i_BFu32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
  unsigned int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFu32i_BFu32i) C1{ FL:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFs32i_BFu32i_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFu32i_BFu32i");
    static STRUCT_IF_C BFs32ll_BFs32i_BFu32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFu32i_BFu32i, BFs32ll_BFs32i_BFu32i_BFu32i)
//============================================================================


struct  BFs32ll_BFs32i_BFu32i_BFu32ll  {
  signed __tsi64 v1:32;
  signed int v2:32;
  unsigned int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFu32i_BFu32ll) C1{ FL:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32ll_BFs32i_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFu32i_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFs32i_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFu32i_BFu32ll, BFs32ll_BFs32i_BFu32i_BFu32ll)
//============================================================================


struct  BFs32ll_BFs32i_BFu32ll  {
  signed __tsi64 v1:32;
  signed int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFs32ll_BFs32i_BFu32ll) C1{ FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFs32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFu32ll, BFs32ll_BFs32i_BFu32ll)
//============================================================================


struct  BFs32ll_BFs32i_BFu32ll_BFs32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
  __tsu64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFu32ll_BFs32i) C1{ FL:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32ll_BFs32i_BFu32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFu32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32i_BFu32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFu32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFu32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFu32ll_BFs32i, BFs32ll_BFs32i_BFu32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFs32i_BFu32ll_BFs32ll  {
  signed __tsi64 v1:32;
  signed int v2:32;
  __tsu64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFu32ll_BFs32ll) C1{ FL:32 Fi:32 FL:32 FL:32}



static void Test_BFs32ll_BFs32i_BFu32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFu32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32i_BFu32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFu32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFu32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFu32ll_BFs32ll, BFs32ll_BFs32i_BFu32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32i_BFu32ll_BFu32i  {
  signed __tsi64 v1:32;
  signed int v2:32;
  __tsu64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFu32ll_BFu32i) C1{ FL:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32ll_BFs32i_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFu32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFs32i_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFu32ll_BFu32i, BFs32ll_BFs32i_BFu32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFs32i_BFu32ll_BFu32ll  {
  signed __tsi64 v1:32;
  signed int v2:32;
  __tsu64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFs32i_BFu32ll_BFu32ll) C1{ FL:32 Fi:32 FL:32 FL:32}



static void Test_BFs32ll_BFs32i_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFs32i_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFs32i_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32i_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32i_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32i_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32i_BFu32ll_BFu32ll, BFs32ll_BFs32i_BFu32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFs32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
};
//SIG(1 BFs32ll_BFs32ll) C1{ FL:32 FL:32}



static void Test_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll, BFs32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32ll_BFs32i  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  signed int v3:32;
};
//SIG(1 BFs32ll_BFs32ll_BFs32i) C1{ FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFs32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFs32i, BFs32ll_BFs32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFs32ll_BFs32i_BFs32i  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  signed int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFs32i_BFs32i) C1{ FL:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFs32ll_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFs32i_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFs32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFs32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFs32i_BFs32i, BFs32ll_BFs32ll_BFs32i_BFs32i)
//============================================================================


struct  BFs32ll_BFs32ll_BFs32i_BFs32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  signed int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFs32i_BFs32ll) C1{ FL:32 FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFs32ll_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFs32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFs32i_BFs32ll, BFs32ll_BFs32ll_BFs32i_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32ll_BFs32i_BFu32i  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  signed int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFs32i_BFu32i) C1{ FL:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFs32ll_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFs32i_BFu32i");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFs32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFs32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFs32i_BFu32i, BFs32ll_BFs32ll_BFs32i_BFu32i)
//============================================================================


struct  BFs32ll_BFs32ll_BFs32i_BFu32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  signed int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFs32i_BFu32ll) C1{ FL:32 FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFs32ll_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFs32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFs32i_BFu32ll, BFs32ll_BFs32ll_BFs32i_BFu32ll)
//============================================================================


struct  BFs32ll_BFs32ll_BFs32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  signed __tsi64 v3:32;
};
//SIG(1 BFs32ll_BFs32ll_BFs32ll) C1{ FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFs32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFs32ll, BFs32ll_BFs32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32ll_BFs32ll_BFs32i  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  signed __tsi64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFs32ll_BFs32i) C1{ FL:32 FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFs32ll_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFs32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFs32ll_BFs32i, BFs32ll_BFs32ll_BFs32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFs32ll_BFs32ll_BFs32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  signed __tsi64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFs32ll_BFs32ll) C1{ FL:32 FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFs32ll_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFs32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFs32ll_BFs32ll, BFs32ll_BFs32ll_BFs32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32ll_BFs32ll_BFu32i  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  signed __tsi64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFs32ll_BFu32i) C1{ FL:32 FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFs32ll_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFs32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFs32ll_BFu32i, BFs32ll_BFs32ll_BFs32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFs32ll_BFs32ll_BFu32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  signed __tsi64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFs32ll_BFu32ll) C1{ FL:32 FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFs32ll_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFs32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFs32ll_BFu32ll, BFs32ll_BFs32ll_BFs32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFs32ll_BFu32i  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFs32ll_BFs32ll_BFu32i) C1{ FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFu32i, BFs32ll_BFs32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFs32ll_BFu32i_BFs32i  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  unsigned int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFu32i_BFs32i) C1{ FL:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFs32ll_BFu32i_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFu32i_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFu32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFu32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFu32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFu32i_BFs32i, BFs32ll_BFs32ll_BFu32i_BFs32i)
//============================================================================


struct  BFs32ll_BFs32ll_BFu32i_BFs32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  unsigned int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFu32i_BFs32ll) C1{ FL:32 FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFs32ll_BFu32i_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFu32i_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFu32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFu32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFu32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFu32i_BFs32ll, BFs32ll_BFs32ll_BFu32i_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32ll_BFu32i_BFu32i  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  unsigned int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFu32i_BFu32i) C1{ FL:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFs32ll_BFu32i_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFu32i_BFu32i");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFu32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFu32i_BFu32i, BFs32ll_BFs32ll_BFu32i_BFu32i)
//============================================================================


struct  BFs32ll_BFs32ll_BFu32i_BFu32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  unsigned int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFu32i_BFu32ll) C1{ FL:32 FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFs32ll_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFu32i_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFu32i_BFu32ll, BFs32ll_BFs32ll_BFu32i_BFu32ll)
//============================================================================


struct  BFs32ll_BFs32ll_BFu32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFs32ll_BFs32ll_BFu32ll) C1{ FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFu32ll, BFs32ll_BFs32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFs32ll_BFu32ll_BFs32i  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  __tsu64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFu32ll_BFs32i) C1{ FL:32 FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFs32ll_BFu32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFu32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFu32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFu32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFu32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFu32ll_BFs32i, BFs32ll_BFs32ll_BFu32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFs32ll_BFu32ll_BFs32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  __tsu64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFu32ll_BFs32ll) C1{ FL:32 FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFs32ll_BFu32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFu32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFu32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFu32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFu32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFu32ll_BFs32ll, BFs32ll_BFs32ll_BFu32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFs32ll_BFu32ll_BFu32i  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  __tsu64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFu32ll_BFu32i) C1{ FL:32 FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFs32ll_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFu32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFu32ll_BFu32i, BFs32ll_BFs32ll_BFu32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFs32ll_BFu32ll_BFu32ll  {
  signed __tsi64 v1:32;
  signed __tsi64 v2:32;
  __tsu64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFs32ll_BFu32ll_BFu32ll) C1{ FL:32 FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFs32ll_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFs32ll_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFs32ll_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFs32ll_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFs32ll_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFs32ll_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFs32ll_BFu32ll_BFu32ll, BFs32ll_BFs32ll_BFu32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
};
//SIG(1 BFs32ll_BFu32i) C1{ FL:32 Fi:32}



static void Test_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i, BFs32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFu32i_BFs32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  signed int v3:32;
};
//SIG(1 BFs32ll_BFu32i_BFs32i) C1{ FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFu32i_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFs32i");
    static STRUCT_IF_C BFs32ll_BFu32i_BFs32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFu32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFs32i, BFs32ll_BFu32i_BFs32i)
//============================================================================


struct  BFs32ll_BFu32i_BFs32i_BFs32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  signed int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFs32i_BFs32i) C1{ FL:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFu32i_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFs32i_BFs32i");
    static STRUCT_IF_C BFs32ll_BFu32i_BFs32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFs32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFs32i_BFs32i, BFs32ll_BFu32i_BFs32i_BFs32i)
//============================================================================


struct  BFs32ll_BFu32i_BFs32i_BFs32ll  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  signed int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFs32i_BFs32ll) C1{ FL:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32ll_BFu32i_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFu32i_BFs32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFs32i_BFs32ll, BFs32ll_BFu32i_BFs32i_BFs32ll)
//============================================================================


struct  BFs32ll_BFu32i_BFs32i_BFu32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  signed int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFs32i_BFu32i) C1{ FL:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFu32i_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFs32i_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32i_BFs32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFs32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFs32i_BFu32i, BFs32ll_BFu32i_BFs32i_BFu32i)
//============================================================================


struct  BFs32ll_BFu32i_BFs32i_BFu32ll  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  signed int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFs32i_BFu32ll) C1{ FL:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32ll_BFu32i_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32i_BFs32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFs32i_BFu32ll, BFs32ll_BFu32i_BFs32i_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32i_BFs32ll  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  signed __tsi64 v3:32;
};
//SIG(1 BFs32ll_BFu32i_BFs32ll) C1{ FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFu32i_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFu32i_BFs32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFu32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFs32ll, BFs32ll_BFu32i_BFs32ll)
//============================================================================


struct  BFs32ll_BFu32i_BFs32ll_BFs32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  signed __tsi64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFs32ll_BFs32i) C1{ FL:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32ll_BFu32i_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFu32i_BFs32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFs32ll_BFs32i, BFs32ll_BFu32i_BFs32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFu32i_BFs32ll_BFs32ll  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  signed __tsi64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFs32ll_BFs32ll) C1{ FL:32 Fi:32 FL:32 FL:32}



static void Test_BFs32ll_BFu32i_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFu32i_BFs32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFs32ll_BFs32ll, BFs32ll_BFu32i_BFs32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFu32i_BFs32ll_BFu32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  signed __tsi64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFs32ll_BFu32i) C1{ FL:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32ll_BFu32i_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32i_BFs32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFs32ll_BFu32i, BFs32ll_BFu32i_BFs32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFu32i_BFs32ll_BFu32ll  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  signed __tsi64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFs32ll_BFu32ll) C1{ FL:32 Fi:32 FL:32 FL:32}



static void Test_BFs32ll_BFu32i_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32i_BFs32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFs32ll_BFu32ll, BFs32ll_BFu32i_BFs32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32i_BFu32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFs32ll_BFu32i_BFu32i) C1{ FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFu32i_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFu32i, BFs32ll_BFu32i_BFu32i)
//============================================================================


struct  BFs32ll_BFu32i_BFu32i_BFs32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  unsigned int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFu32i_BFs32i) C1{ FL:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFu32i_BFu32i_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFu32i_BFs32i");
    static STRUCT_IF_C BFs32ll_BFu32i_BFu32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFu32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFu32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFu32i_BFs32i, BFs32ll_BFu32i_BFu32i_BFs32i)
//============================================================================


struct  BFs32ll_BFu32i_BFu32i_BFs32ll  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  unsigned int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFu32i_BFs32ll) C1{ FL:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32ll_BFu32i_BFu32i_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFu32i_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFu32i_BFu32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFu32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFu32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFu32i_BFs32ll, BFs32ll_BFu32i_BFu32i_BFs32ll)
//============================================================================


struct  BFs32ll_BFu32i_BFu32i_BFu32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  unsigned int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFu32i_BFu32i) C1{ FL:32 Fi:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFu32i_BFu32i_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFu32i_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32i_BFu32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFu32i_BFu32i, BFs32ll_BFu32i_BFu32i_BFu32i)
//============================================================================


struct  BFs32ll_BFu32i_BFu32i_BFu32ll  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  unsigned int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFu32i_BFu32ll) C1{ FL:32 Fi:32 Fi:32 FL:32}



static void Test_BFs32ll_BFu32i_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFu32i_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32i_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFu32i_BFu32ll, BFs32ll_BFu32i_BFu32i_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32i_BFu32ll  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFs32ll_BFu32i_BFu32ll) C1{ FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFu32ll, BFs32ll_BFu32i_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32i_BFu32ll_BFs32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  __tsu64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFu32ll_BFs32i) C1{ FL:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32ll_BFu32i_BFu32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFu32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFu32i_BFu32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFu32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFu32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFu32ll_BFs32i, BFs32ll_BFu32i_BFu32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFu32i_BFu32ll_BFs32ll  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  __tsu64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFu32ll_BFs32ll) C1{ FL:32 Fi:32 FL:32 FL:32}



static void Test_BFs32ll_BFu32i_BFu32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFu32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFu32i_BFu32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFu32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFu32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFu32ll_BFs32ll, BFs32ll_BFu32i_BFu32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFu32i_BFu32ll_BFu32i  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  __tsu64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFu32ll_BFu32i) C1{ FL:32 Fi:32 FL:32 Fi:32}



static void Test_BFs32ll_BFu32i_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFu32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32i_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFu32ll_BFu32i, BFs32ll_BFu32i_BFu32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFu32i_BFu32ll_BFu32ll  {
  signed __tsi64 v1:32;
  unsigned int v2:32;
  __tsu64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFu32i_BFu32ll_BFu32ll) C1{ FL:32 Fi:32 FL:32 FL:32}



static void Test_BFs32ll_BFu32i_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32i_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32i_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32i_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32i_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32i_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32i_BFu32ll_BFu32ll, BFs32ll_BFu32i_BFu32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
};
//SIG(1 BFs32ll_BFu32ll) C1{ FL:32 FL:32}



static void Test_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll, BFs32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32ll_BFs32i  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  signed int v3:32;
};
//SIG(1 BFs32ll_BFu32ll_BFs32i) C1{ FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFu32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFs32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFu32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFs32i, BFs32ll_BFu32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFu32ll_BFs32i_BFs32i  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  signed int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFs32i_BFs32i) C1{ FL:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFu32ll_BFs32i_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFs32i_BFs32i");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFs32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFs32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFs32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFs32i_BFs32i, BFs32ll_BFu32ll_BFs32i_BFs32i)
//============================================================================


struct  BFs32ll_BFu32ll_BFs32i_BFs32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  signed int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFs32i_BFs32ll) C1{ FL:32 FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFu32ll_BFs32i_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFs32i_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFs32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFs32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFs32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFs32i_BFs32ll, BFs32ll_BFu32ll_BFs32i_BFs32ll)
//============================================================================


struct  BFs32ll_BFu32ll_BFs32i_BFu32i  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  signed int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFs32i_BFu32i) C1{ FL:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFu32ll_BFs32i_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFs32i_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFs32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFs32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFs32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFs32i_BFu32i, BFs32ll_BFu32ll_BFs32i_BFu32i)
//============================================================================


struct  BFs32ll_BFu32ll_BFs32i_BFu32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  signed int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFs32i_BFu32ll) C1{ FL:32 FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFu32ll_BFs32i_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFs32i_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFs32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFs32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFs32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFs32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFs32i_BFu32ll, BFs32ll_BFu32ll_BFs32i_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32ll_BFs32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  signed __tsi64 v3:32;
};
//SIG(1 BFs32ll_BFu32ll_BFs32ll) C1{ FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFu32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFs32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFu32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFs32ll, BFs32ll_BFu32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFu32ll_BFs32ll_BFs32i  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  signed __tsi64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFs32ll_BFs32i) C1{ FL:32 FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFu32ll_BFs32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFs32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFs32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFs32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFs32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFs32ll_BFs32i, BFs32ll_BFu32ll_BFs32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFu32ll_BFs32ll_BFs32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  signed __tsi64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFs32ll_BFs32ll) C1{ FL:32 FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFu32ll_BFs32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFs32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFs32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFs32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFs32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFs32ll_BFs32ll, BFs32ll_BFu32ll_BFs32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFu32ll_BFs32ll_BFu32i  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  signed __tsi64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFs32ll_BFu32i) C1{ FL:32 FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFu32ll_BFs32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFs32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFs32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFs32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFs32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFs32ll_BFu32i, BFs32ll_BFu32ll_BFs32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFu32ll_BFs32ll_BFu32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  signed __tsi64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFs32ll_BFu32ll) C1{ FL:32 FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFu32ll_BFs32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFs32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFs32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFs32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFs32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFs32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFs32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFs32ll_BFu32ll, BFs32ll_BFu32ll_BFs32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32ll_BFu32i  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFs32ll_BFu32ll_BFu32i) C1{ FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFu32i, BFs32ll_BFu32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFu32ll_BFu32i_BFs32i  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  unsigned int v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFu32i_BFs32i) C1{ FL:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFu32ll_BFu32i_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFu32i_BFs32i");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFu32i_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFu32i_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFu32i_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFu32i_BFs32i, BFs32ll_BFu32ll_BFu32i_BFs32i)
//============================================================================


struct  BFs32ll_BFu32ll_BFu32i_BFs32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  unsigned int v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFu32i_BFs32ll) C1{ FL:32 FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFu32ll_BFu32i_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFu32i_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFu32i_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFu32i_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFu32i_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFu32i_BFs32ll, BFs32ll_BFu32ll_BFu32i_BFs32ll)
//============================================================================


struct  BFs32ll_BFu32ll_BFu32i_BFu32i  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  unsigned int v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFu32i_BFu32i) C1{ FL:32 FL:32 Fi:32 Fi:32}



static void Test_BFs32ll_BFu32ll_BFu32i_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFu32i_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFu32i_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFu32i_BFu32i, BFs32ll_BFu32ll_BFu32i_BFu32i)
//============================================================================


struct  BFs32ll_BFu32ll_BFu32i_BFu32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  unsigned int v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFu32i_BFu32ll) C1{ FL:32 FL:32 Fi:32 FL:32}



static void Test_BFs32ll_BFu32ll_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFu32i_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFu32i_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFu32i_BFu32ll, BFs32ll_BFu32ll_BFu32i_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32ll_BFu32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFs32ll_BFu32ll_BFu32ll) C1{ FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs32ll_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFu32ll, BFs32ll_BFu32ll_BFu32ll)
//============================================================================


struct  BFs32ll_BFu32ll_BFu32ll_BFs32i  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  __tsu64 v3:32;
  signed int v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFu32ll_BFs32i) C1{ FL:32 FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFu32ll_BFu32ll_BFs32i()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFu32ll_BFs32i");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFu32ll_BFs32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFu32ll_BFs32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFu32ll_BFs32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFs32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFs32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFu32ll_BFs32i, BFs32ll_BFu32ll_BFu32ll_BFs32i)
//============================================================================


struct  BFs32ll_BFu32ll_BFu32ll_BFs32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  __tsu64 v3:32;
  signed __tsi64 v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFu32ll_BFs32ll) C1{ FL:32 FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFu32ll_BFu32ll_BFs32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFu32ll_BFs32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFu32ll_BFs32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFu32ll_BFs32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFu32ll_BFs32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFs32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFs32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFu32ll_BFs32ll, BFs32ll_BFu32ll_BFu32ll_BFs32ll)
//============================================================================


struct  BFs32ll_BFu32ll_BFu32ll_BFu32i  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  __tsu64 v3:32;
  unsigned int v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFu32ll_BFu32i) C1{ FL:32 FL:32 FL:32 Fi:32}



static void Test_BFs32ll_BFu32ll_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFu32ll_BFu32i");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFu32ll_BFu32i lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFu32ll_BFu32i, BFs32ll_BFu32ll_BFu32ll_BFu32i)
//============================================================================


struct  BFs32ll_BFu32ll_BFu32ll_BFu32ll  {
  signed __tsi64 v1:32;
  __tsu64 v2:32;
  __tsu64 v3:32;
  __tsu64 v4:32;
};
//SIG(1 BFs32ll_BFu32ll_BFu32ll_BFu32ll) C1{ FL:32 FL:32 FL:32 FL:32}



static void Test_BFs32ll_BFu32ll_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFs32ll_BFu32ll_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFs32ll_BFu32ll_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), 16, "sizeof(BFs32ll_BFu32ll_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs32ll_BFu32ll_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_sll(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, 1, "BFs32ll_BFu32ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v4, 12, 0, 32, hide_ull(1LL<<31), "BFs32ll_BFu32ll_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs32ll_BFu32ll_BFu32ll_BFu32ll, BFs32ll_BFu32ll_BFu32ll_BFu32ll)
//============================================================================


struct  BFs33_BFs33  {
  signed __tsi64 v1:33;
  signed __tsi64 v2:33;
};
//SIG(1 BFs33_BFs33) C1{ FL:33 FL:33}



static void Test_BFs33_BFs33()
{
  {
    init_simple_test("BFs33_BFs33");
    static STRUCT_IF_C BFs33_BFs33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs33_BFs33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFs33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFs33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_sll(1LL<<32), "BFs33_BFs33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFs33, BFs33_BFs33)
//============================================================================


struct  BFs33_BFs33_BFs33  {
  signed __tsi64 v1:33;
  signed __tsi64 v2:33;
  signed __tsi64 v3:33;
};
//SIG(1 BFs33_BFs33_BFs33) C1{ FL:33 FL:33 FL:33}



static void Test_BFs33_BFs33_BFs33()
{
  {
    init_simple_test("BFs33_BFs33_BFs33");
    static STRUCT_IF_C BFs33_BFs33_BFs33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFs33_BFs33_BFs33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFs33_BFs33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFs33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFs33_BFs33, BFs33_BFs33_BFs33)
//============================================================================


struct  BFs33_BFs33_BFs33_BFs33  {
  signed __tsi64 v1:33;
  signed __tsi64 v2:33;
  signed __tsi64 v3:33;
  signed __tsi64 v4:33;
};
//SIG(1 BFs33_BFs33_BFs33_BFs33) C1{ FL:33 FL:33 FL:33 FL:33}



static void Test_BFs33_BFs33_BFs33_BFs33()
{
  {
    init_simple_test("BFs33_BFs33_BFs33_BFs33");
    static STRUCT_IF_C BFs33_BFs33_BFs33_BFs33 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(BFs33_BFs33_BFs33_BFs33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFs33_BFs33_BFs33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, 1, "BFs33_BFs33_BFs33_BFs33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFs33_BFs33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFs33_BFs33_BFs33, BFs33_BFs33_BFs33_BFs33)
//============================================================================


struct  BFs33_BFs33_BFs33_BFu33  {
  signed __tsi64 v1:33;
  signed __tsi64 v2:33;
  signed __tsi64 v3:33;
  __tsu64 v4:33;
};
//SIG(1 BFs33_BFs33_BFs33_BFu33) C1{ FL:33 FL:33 FL:33 FL:33}



static void Test_BFs33_BFs33_BFs33_BFu33()
{
  {
    init_simple_test("BFs33_BFs33_BFs33_BFu33");
    static STRUCT_IF_C BFs33_BFs33_BFs33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(BFs33_BFs33_BFs33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFs33_BFs33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, 1, "BFs33_BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, hide_ull(1LL<<32), "BFs33_BFs33_BFs33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFs33_BFs33_BFu33, BFs33_BFs33_BFs33_BFu33)
//============================================================================


struct  BFs33_BFs33_BFu33  {
  signed __tsi64 v1:33;
  signed __tsi64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFs33_BFs33_BFu33) C1{ FL:33 FL:33 FL:33}



static void Test_BFs33_BFs33_BFu33()
{
  {
    init_simple_test("BFs33_BFs33_BFu33");
    static STRUCT_IF_C BFs33_BFs33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFs33_BFs33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFs33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFs33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFs33_BFs33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFs33_BFu33, BFs33_BFs33_BFu33)
//============================================================================


struct  BFs33_BFs33_BFu33_BFs33  {
  signed __tsi64 v1:33;
  signed __tsi64 v2:33;
  __tsu64 v3:33;
  signed __tsi64 v4:33;
};
//SIG(1 BFs33_BFs33_BFu33_BFs33) C1{ FL:33 FL:33 FL:33 FL:33}



static void Test_BFs33_BFs33_BFu33_BFs33()
{
  {
    init_simple_test("BFs33_BFs33_BFu33_BFs33");
    static STRUCT_IF_C BFs33_BFs33_BFu33_BFs33 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(BFs33_BFs33_BFu33_BFs33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFs33_BFu33_BFs33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFs33_BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, 1, "BFs33_BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFu33_BFs33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFs33_BFu33_BFs33, BFs33_BFs33_BFu33_BFs33)
//============================================================================


struct  BFs33_BFs33_BFu33_BFu33  {
  signed __tsi64 v1:33;
  signed __tsi64 v2:33;
  __tsu64 v3:33;
  __tsu64 v4:33;
};
//SIG(1 BFs33_BFs33_BFu33_BFu33) C1{ FL:33 FL:33 FL:33 FL:33}



static void Test_BFs33_BFs33_BFu33_BFu33()
{
  {
    init_simple_test("BFs33_BFs33_BFu33_BFu33");
    static STRUCT_IF_C BFs33_BFs33_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(BFs33_BFs33_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFs33_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_sll(1LL<<32), "BFs33_BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFs33_BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, 1, "BFs33_BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, hide_ull(1LL<<32), "BFs33_BFs33_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFs33_BFu33_BFu33, BFs33_BFs33_BFu33_BFu33)
//============================================================================


struct  BFs33_BFu33  {
  signed __tsi64 v1:33;
  __tsu64 v2:33;
};
//SIG(1 BFs33_BFu33) C1{ FL:33 FL:33}



static void Test_BFs33_BFu33()
{
  {
    init_simple_test("BFs33_BFu33");
    static STRUCT_IF_C BFs33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFs33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFs33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFu33, BFs33_BFu33)
//============================================================================


struct  BFs33_BFu33_BFs33  {
  signed __tsi64 v1:33;
  __tsu64 v2:33;
  signed __tsi64 v3:33;
};
//SIG(1 BFs33_BFu33_BFs33) C1{ FL:33 FL:33 FL:33}



static void Test_BFs33_BFu33_BFs33()
{
  {
    init_simple_test("BFs33_BFu33_BFs33");
    static STRUCT_IF_C BFs33_BFu33_BFs33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFs33_BFu33_BFs33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFu33_BFs33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFu33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_sll(1LL<<32), "BFs33_BFu33_BFs33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFu33_BFs33, BFs33_BFu33_BFs33)
//============================================================================


struct  BFs33_BFu33_BFs33_BFs33  {
  signed __tsi64 v1:33;
  __tsu64 v2:33;
  signed __tsi64 v3:33;
  signed __tsi64 v4:33;
};
//SIG(1 BFs33_BFu33_BFs33_BFs33) C1{ FL:33 FL:33 FL:33 FL:33}



static void Test_BFs33_BFu33_BFs33_BFs33()
{
  {
    init_simple_test("BFs33_BFu33_BFs33_BFs33");
    static STRUCT_IF_C BFs33_BFu33_BFs33_BFs33 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(BFs33_BFu33_BFs33_BFs33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFu33_BFs33_BFs33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFu33_BFs33_BFs33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFu33_BFs33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFu33_BFs33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFs33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFu33_BFs33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_sll(1LL<<32), "BFs33_BFu33_BFs33_BFs33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, 1, "BFs33_BFu33_BFs33_BFs33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, hide_sll(1LL<<32), "BFs33_BFu33_BFs33_BFs33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFu33_BFs33_BFs33, BFs33_BFu33_BFs33_BFs33)
//============================================================================


struct  BFs33_BFu33_BFs33_BFu33  {
  signed __tsi64 v1:33;
  __tsu64 v2:33;
  signed __tsi64 v3:33;
  __tsu64 v4:33;
};
//SIG(1 BFs33_BFu33_BFs33_BFu33) C1{ FL:33 FL:33 FL:33 FL:33}



static void Test_BFs33_BFu33_BFs33_BFu33()
{
  {
    init_simple_test("BFs33_BFu33_BFs33_BFu33");
    static STRUCT_IF_C BFs33_BFu33_BFs33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(BFs33_BFu33_BFs33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFu33_BFs33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFu33_BFs33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFu33_BFs33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFu33_BFs33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFs33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFu33_BFs33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_sll(1LL<<32), "BFs33_BFu33_BFs33_BFu33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, 1, "BFs33_BFu33_BFs33_BFu33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFs33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFu33_BFs33_BFu33, BFs33_BFu33_BFs33_BFu33)
//============================================================================


struct  BFs33_BFu33_BFu33  {
  signed __tsi64 v1:33;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFs33_BFu33_BFu33) C1{ FL:33 FL:33 FL:33}



static void Test_BFs33_BFu33_BFu33()
{
  {
    init_simple_test("BFs33_BFu33_BFu33");
    static STRUCT_IF_C BFs33_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFs33_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFu33_BFu33, BFs33_BFu33_BFu33)
//============================================================================


struct  BFs33_BFu33_BFu33_BFs33  {
  signed __tsi64 v1:33;
  __tsu64 v2:33;
  __tsu64 v3:33;
  signed __tsi64 v4:33;
};
//SIG(1 BFs33_BFu33_BFu33_BFs33) C1{ FL:33 FL:33 FL:33 FL:33}



static void Test_BFs33_BFu33_BFu33_BFs33()
{
  {
    init_simple_test("BFs33_BFu33_BFu33_BFs33");
    static STRUCT_IF_C BFs33_BFu33_BFu33_BFs33 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(BFs33_BFu33_BFu33_BFs33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFu33_BFu33_BFs33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFu33_BFu33_BFs33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFu33_BFu33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFu33_BFu33_BFs33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFu33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFu33_BFu33_BFs33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFu33_BFs33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, 1, "BFs33_BFu33_BFu33_BFs33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, hide_sll(1LL<<32), "BFs33_BFu33_BFu33_BFs33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFu33_BFu33_BFs33, BFs33_BFu33_BFu33_BFs33)
//============================================================================


struct  BFs33_BFu33_BFu33_BFu33  {
  signed __tsi64 v1:33;
  __tsu64 v2:33;
  __tsu64 v3:33;
  __tsu64 v4:33;
};
//SIG(1 BFs33_BFu33_BFu33_BFu33) C1{ FL:33 FL:33 FL:33 FL:33}



static void Test_BFs33_BFu33_BFu33_BFu33()
{
  {
    init_simple_test("BFs33_BFu33_BFu33_BFu33");
    static STRUCT_IF_C BFs33_BFu33_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(BFs33_BFu33_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs33_BFu33_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFs33_BFu33_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_sll(1LL<<32), "BFs33_BFu33_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFs33_BFu33_BFu33_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, 1, "BFs33_BFu33_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFu33_BFu33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, 1, "BFs33_BFu33_BFu33_BFu33");
    set_bf_and_test(lv, v4, ABISELECT(24,12), ABISELECT(0,3), 33, hide_ull(1LL<<32), "BFs33_BFu33_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs33_BFu33_BFu33_BFu33, BFs33_BFu33_BFu33_BFu33)
//============================================================================


struct  BFs63_BFs63  {
  signed __tsi64 v1:63;
  signed __tsi64 v2:63;
};
//SIG(1 BFs63_BFs63) C1{ FL:63 FL:63}



static void Test_BFs63_BFs63()
{
  {
    init_simple_test("BFs63_BFs63");
    static STRUCT_IF_C BFs63_BFs63 lv;
    check2(sizeof(lv), 16, "sizeof(BFs63_BFs63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFs63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFs63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFs63, BFs63_BFs63)
//============================================================================


struct  BFs63_BFs63_BFs63  {
  signed __tsi64 v1:63;
  signed __tsi64 v2:63;
  signed __tsi64 v3:63;
};
//SIG(1 BFs63_BFs63_BFs63) C1{ FL:63 FL:63 FL:63}



static void Test_BFs63_BFs63_BFs63()
{
  {
    init_simple_test("BFs63_BFs63_BFs63");
    static STRUCT_IF_C BFs63_BFs63_BFs63 lv;
    check2(sizeof(lv), 24, "sizeof(BFs63_BFs63_BFs63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFs63_BFs63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFs63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFs63_BFs63, BFs63_BFs63_BFs63)
//============================================================================


struct  BFs63_BFs63_BFs63_BFs63  {
  signed __tsi64 v1:63;
  signed __tsi64 v2:63;
  signed __tsi64 v3:63;
  signed __tsi64 v4:63;
};
//SIG(1 BFs63_BFs63_BFs63_BFs63) C1{ FL:63 FL:63 FL:63 FL:63}



static void Test_BFs63_BFs63_BFs63_BFs63()
{
  {
    init_simple_test("BFs63_BFs63_BFs63_BFs63");
    static STRUCT_IF_C BFs63_BFs63_BFs63_BFs63 lv;
    check2(sizeof(lv), 32, "sizeof(BFs63_BFs63_BFs63_BFs63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFs63_BFs63_BFs63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v4, 24, 0, 63, 1, "BFs63_BFs63_BFs63_BFs63");
    set_bf_and_test(lv, v4, 24, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFs63_BFs63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFs63_BFs63_BFs63, BFs63_BFs63_BFs63_BFs63)
//============================================================================


struct  BFs63_BFs63_BFs63_BFu63  {
  signed __tsi64 v1:63;
  signed __tsi64 v2:63;
  signed __tsi64 v3:63;
  __tsu64 v4:63;
};
//SIG(1 BFs63_BFs63_BFs63_BFu63) C1{ FL:63 FL:63 FL:63 FL:63}



static void Test_BFs63_BFs63_BFs63_BFu63()
{
  {
    init_simple_test("BFs63_BFs63_BFs63_BFu63");
    static STRUCT_IF_C BFs63_BFs63_BFs63_BFu63 lv;
    check2(sizeof(lv), 32, "sizeof(BFs63_BFs63_BFs63_BFu63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFs63_BFs63_BFu63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v4, 24, 0, 63, 1, "BFs63_BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v4, 24, 0, 63, hide_ull(1LL<<62), "BFs63_BFs63_BFs63_BFu63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFs63_BFs63_BFu63, BFs63_BFs63_BFs63_BFu63)
//============================================================================


struct  BFs63_BFs63_BFu63  {
  signed __tsi64 v1:63;
  signed __tsi64 v2:63;
  __tsu64 v3:63;
};
//SIG(1 BFs63_BFs63_BFu63) C1{ FL:63 FL:63 FL:63}



static void Test_BFs63_BFs63_BFu63()
{
  {
    init_simple_test("BFs63_BFs63_BFu63");
    static STRUCT_IF_C BFs63_BFs63_BFu63 lv;
    check2(sizeof(lv), 24, "sizeof(BFs63_BFs63_BFu63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFs63_BFu63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFs63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_ull(1LL<<62), "BFs63_BFs63_BFu63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFs63_BFu63, BFs63_BFs63_BFu63)
//============================================================================


struct  BFs63_BFs63_BFu63_BFs63  {
  signed __tsi64 v1:63;
  signed __tsi64 v2:63;
  __tsu64 v3:63;
  signed __tsi64 v4:63;
};
//SIG(1 BFs63_BFs63_BFu63_BFs63) C1{ FL:63 FL:63 FL:63 FL:63}



static void Test_BFs63_BFs63_BFu63_BFs63()
{
  {
    init_simple_test("BFs63_BFs63_BFu63_BFs63");
    static STRUCT_IF_C BFs63_BFs63_BFu63_BFs63 lv;
    check2(sizeof(lv), 32, "sizeof(BFs63_BFs63_BFu63_BFs63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFs63_BFu63_BFs63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_ull(1LL<<62), "BFs63_BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v4, 24, 0, 63, 1, "BFs63_BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v4, 24, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFu63_BFs63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFs63_BFu63_BFs63, BFs63_BFs63_BFu63_BFs63)
//============================================================================


struct  BFs63_BFs63_BFu63_BFu63  {
  signed __tsi64 v1:63;
  signed __tsi64 v2:63;
  __tsu64 v3:63;
  __tsu64 v4:63;
};
//SIG(1 BFs63_BFs63_BFu63_BFu63) C1{ FL:63 FL:63 FL:63 FL:63}



static void Test_BFs63_BFs63_BFu63_BFu63()
{
  {
    init_simple_test("BFs63_BFs63_BFu63_BFu63");
    static STRUCT_IF_C BFs63_BFs63_BFu63_BFu63 lv;
    check2(sizeof(lv), 32, "sizeof(BFs63_BFs63_BFu63_BFu63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFs63_BFu63_BFu63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_sll(1LL<<62), "BFs63_BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_ull(1LL<<62), "BFs63_BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v4, 24, 0, 63, 1, "BFs63_BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v4, 24, 0, 63, hide_ull(1LL<<62), "BFs63_BFs63_BFu63_BFu63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFs63_BFu63_BFu63, BFs63_BFs63_BFu63_BFu63)
//============================================================================


struct  BFs63_BFu63  {
  signed __tsi64 v1:63;
  __tsu64 v2:63;
};
//SIG(1 BFs63_BFu63) C1{ FL:63 FL:63}



static void Test_BFs63_BFu63()
{
  {
    init_simple_test("BFs63_BFu63");
    static STRUCT_IF_C BFs63_BFu63 lv;
    check2(sizeof(lv), 16, "sizeof(BFs63_BFu63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFu63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFu63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFu63, BFs63_BFu63)
//============================================================================


struct  BFs63_BFu63_BFs63  {
  signed __tsi64 v1:63;
  __tsu64 v2:63;
  signed __tsi64 v3:63;
};
//SIG(1 BFs63_BFu63_BFs63) C1{ FL:63 FL:63 FL:63}



static void Test_BFs63_BFu63_BFs63()
{
  {
    init_simple_test("BFs63_BFu63_BFs63");
    static STRUCT_IF_C BFs63_BFu63_BFs63 lv;
    check2(sizeof(lv), 24, "sizeof(BFs63_BFu63_BFs63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFu63_BFs63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFu63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFs63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFu63_BFs63, BFs63_BFu63_BFs63)
//============================================================================


struct  BFs63_BFu63_BFs63_BFs63  {
  signed __tsi64 v1:63;
  __tsu64 v2:63;
  signed __tsi64 v3:63;
  signed __tsi64 v4:63;
};
//SIG(1 BFs63_BFu63_BFs63_BFs63) C1{ FL:63 FL:63 FL:63 FL:63}



static void Test_BFs63_BFu63_BFs63_BFs63()
{
  {
    init_simple_test("BFs63_BFu63_BFs63_BFs63");
    static STRUCT_IF_C BFs63_BFu63_BFs63_BFs63 lv;
    check2(sizeof(lv), 32, "sizeof(BFs63_BFu63_BFs63_BFs63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFu63_BFs63_BFs63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFu63_BFs63_BFs63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFs63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFu63_BFs63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFs63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFu63_BFs63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFs63_BFs63");
    set_bf_and_test(lv, v4, 24, 0, 63, 1, "BFs63_BFu63_BFs63_BFs63");
    set_bf_and_test(lv, v4, 24, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFs63_BFs63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFu63_BFs63_BFs63, BFs63_BFu63_BFs63_BFs63)
//============================================================================


struct  BFs63_BFu63_BFs63_BFu63  {
  signed __tsi64 v1:63;
  __tsu64 v2:63;
  signed __tsi64 v3:63;
  __tsu64 v4:63;
};
//SIG(1 BFs63_BFu63_BFs63_BFu63) C1{ FL:63 FL:63 FL:63 FL:63}



static void Test_BFs63_BFu63_BFs63_BFu63()
{
  {
    init_simple_test("BFs63_BFu63_BFs63_BFu63");
    static STRUCT_IF_C BFs63_BFu63_BFs63_BFu63 lv;
    check2(sizeof(lv), 32, "sizeof(BFs63_BFu63_BFs63_BFu63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFu63_BFs63_BFu63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFu63_BFs63_BFu63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFs63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFu63_BFs63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFs63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFu63_BFs63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFs63_BFu63");
    set_bf_and_test(lv, v4, 24, 0, 63, 1, "BFs63_BFu63_BFs63_BFu63");
    set_bf_and_test(lv, v4, 24, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFs63_BFu63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFu63_BFs63_BFu63, BFs63_BFu63_BFs63_BFu63)
//============================================================================


struct  BFs63_BFu63_BFu63  {
  signed __tsi64 v1:63;
  __tsu64 v2:63;
  __tsu64 v3:63;
};
//SIG(1 BFs63_BFu63_BFu63) C1{ FL:63 FL:63 FL:63}



static void Test_BFs63_BFu63_BFu63()
{
  {
    init_simple_test("BFs63_BFu63_BFu63");
    static STRUCT_IF_C BFs63_BFu63_BFu63 lv;
    check2(sizeof(lv), 24, "sizeof(BFs63_BFu63_BFu63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFu63_BFu63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFu63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFu63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFu63_BFu63, BFs63_BFu63_BFu63)
//============================================================================


struct  BFs63_BFu63_BFu63_BFs63  {
  signed __tsi64 v1:63;
  __tsu64 v2:63;
  __tsu64 v3:63;
  signed __tsi64 v4:63;
};
//SIG(1 BFs63_BFu63_BFu63_BFs63) C1{ FL:63 FL:63 FL:63 FL:63}



static void Test_BFs63_BFu63_BFu63_BFs63()
{
  {
    init_simple_test("BFs63_BFu63_BFu63_BFs63");
    static STRUCT_IF_C BFs63_BFu63_BFu63_BFs63 lv;
    check2(sizeof(lv), 32, "sizeof(BFs63_BFu63_BFu63_BFs63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFu63_BFu63_BFs63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFu63_BFu63_BFs63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFu63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFu63_BFu63_BFs63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFu63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFu63_BFu63_BFs63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFu63_BFs63");
    set_bf_and_test(lv, v4, 24, 0, 63, 1, "BFs63_BFu63_BFu63_BFs63");
    set_bf_and_test(lv, v4, 24, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFu63_BFs63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFu63_BFu63_BFs63, BFs63_BFu63_BFu63_BFs63)
//============================================================================


struct  BFs63_BFu63_BFu63_BFu63  {
  signed __tsi64 v1:63;
  __tsu64 v2:63;
  __tsu64 v3:63;
  __tsu64 v4:63;
};
//SIG(1 BFs63_BFu63_BFu63_BFu63) C1{ FL:63 FL:63 FL:63 FL:63}



static void Test_BFs63_BFu63_BFu63_BFu63()
{
  {
    init_simple_test("BFs63_BFu63_BFu63_BFu63");
    static STRUCT_IF_C BFs63_BFu63_BFu63_BFu63 lv;
    check2(sizeof(lv), 32, "sizeof(BFs63_BFu63_BFu63_BFu63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs63_BFu63_BFu63_BFu63)");
    set_bf_and_test(lv, v1, 0, 0, 63, 1, "BFs63_BFu63_BFu63_BFu63");
    set_bf_and_test(lv, v1, 0, 0, 63, hide_sll(1LL<<62), "BFs63_BFu63_BFu63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, 1, "BFs63_BFu63_BFu63_BFu63");
    set_bf_and_test(lv, v2, 8, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFu63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, 1, "BFs63_BFu63_BFu63_BFu63");
    set_bf_and_test(lv, v3, 16, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFu63_BFu63");
    set_bf_and_test(lv, v4, 24, 0, 63, 1, "BFs63_BFu63_BFu63_BFu63");
    set_bf_and_test(lv, v4, 24, 0, 63, hide_ull(1LL<<62), "BFs63_BFu63_BFu63_BFu63");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs63_BFu63_BFu63_BFu63, BFs63_BFu63_BFu63_BFu63)
//============================================================================


struct  BFs64_BFs64  {
  signed __tsi64 v1:64;
  signed __tsi64 v2:64;
};
//SIG(1 BFs64_BFs64) C1{ FL:64 FL:64}



static void Test_BFs64_BFs64()
{
  {
    init_simple_test("BFs64_BFs64");
    static STRUCT_IF_C BFs64_BFs64 lv;
    check2(sizeof(lv), 16, "sizeof(BFs64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFs64, BFs64_BFs64)
//============================================================================


struct  BFs64_BFs64_BFs64  {
  signed __tsi64 v1:64;
  signed __tsi64 v2:64;
  signed __tsi64 v3:64;
};
//SIG(1 BFs64_BFs64_BFs64) C1{ FL:64 FL:64 FL:64}



static void Test_BFs64_BFs64_BFs64()
{
  {
    init_simple_test("BFs64_BFs64_BFs64");
    static STRUCT_IF_C BFs64_BFs64_BFs64 lv;
    check2(sizeof(lv), 24, "sizeof(BFs64_BFs64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFs64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFs64_BFs64, BFs64_BFs64_BFs64)
//============================================================================


struct  BFs64_BFs64_BFs64_BFs64  {
  signed __tsi64 v1:64;
  signed __tsi64 v2:64;
  signed __tsi64 v3:64;
  signed __tsi64 v4:64;
};
//SIG(1 BFs64_BFs64_BFs64_BFs64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFs64_BFs64_BFs64_BFs64()
{
  {
    init_simple_test("BFs64_BFs64_BFs64_BFs64");
    static STRUCT_IF_C BFs64_BFs64_BFs64_BFs64 lv;
    check2(sizeof(lv), 32, "sizeof(BFs64_BFs64_BFs64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFs64_BFs64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFs64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFs64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFs64_BFs64_BFs64, BFs64_BFs64_BFs64_BFs64)
//============================================================================


struct  BFs64_BFs64_BFs64_BFu64  {
  signed __tsi64 v1:64;
  signed __tsi64 v2:64;
  signed __tsi64 v3:64;
  __tsu64 v4:64;
};
//SIG(1 BFs64_BFs64_BFs64_BFu64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFs64_BFs64_BFs64_BFu64()
{
  {
    init_simple_test("BFs64_BFs64_BFs64_BFu64");
    static STRUCT_IF_C BFs64_BFs64_BFs64_BFu64 lv;
    check2(sizeof(lv), 32, "sizeof(BFs64_BFs64_BFs64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFs64_BFs64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFs64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_ull(1LL<<63), "BFs64_BFs64_BFs64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFs64_BFs64_BFu64, BFs64_BFs64_BFs64_BFu64)
//============================================================================


struct  BFs64_BFs64_BFu64  {
  signed __tsi64 v1:64;
  signed __tsi64 v2:64;
  __tsu64 v3:64;
};
//SIG(1 BFs64_BFs64_BFu64) C1{ FL:64 FL:64 FL:64}



static void Test_BFs64_BFs64_BFu64()
{
  {
    init_simple_test("BFs64_BFs64_BFu64");
    static STRUCT_IF_C BFs64_BFs64_BFu64 lv;
    check2(sizeof(lv), 24, "sizeof(BFs64_BFs64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFs64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFs64_BFs64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFs64_BFu64, BFs64_BFs64_BFu64)
//============================================================================


struct  BFs64_BFs64_BFu64_BFs64  {
  signed __tsi64 v1:64;
  signed __tsi64 v2:64;
  __tsu64 v3:64;
  signed __tsi64 v4:64;
};
//SIG(1 BFs64_BFs64_BFu64_BFs64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFs64_BFs64_BFu64_BFs64()
{
  {
    init_simple_test("BFs64_BFs64_BFu64_BFs64");
    static STRUCT_IF_C BFs64_BFs64_BFu64_BFs64 lv;
    check2(sizeof(lv), 32, "sizeof(BFs64_BFs64_BFu64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFs64_BFu64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFs64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFs64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFu64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFs64_BFu64_BFs64, BFs64_BFs64_BFu64_BFs64)
//============================================================================


struct  BFs64_BFs64_BFu64_BFu64  {
  signed __tsi64 v1:64;
  signed __tsi64 v2:64;
  __tsu64 v3:64;
  __tsu64 v4:64;
};
//SIG(1 BFs64_BFs64_BFu64_BFu64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFs64_BFs64_BFu64_BFu64()
{
  {
    init_simple_test("BFs64_BFs64_BFu64_BFu64");
    static STRUCT_IF_C BFs64_BFs64_BFu64_BFu64 lv;
    check2(sizeof(lv), 32, "sizeof(BFs64_BFs64_BFu64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFs64_BFu64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFs64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFs64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFs64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_ull(1LL<<63), "BFs64_BFs64_BFu64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFs64_BFu64_BFu64, BFs64_BFs64_BFu64_BFu64)
//============================================================================


struct  BFs64_BFu64  {
  signed __tsi64 v1:64;
  __tsu64 v2:64;
};
//SIG(1 BFs64_BFu64) C1{ FL:64 FL:64}



static void Test_BFs64_BFu64()
{
  {
    init_simple_test("BFs64_BFu64");
    static STRUCT_IF_C BFs64_BFu64 lv;
    check2(sizeof(lv), 16, "sizeof(BFs64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFu64, BFs64_BFu64)
//============================================================================


struct  BFs64_BFu64_BFs64  {
  signed __tsi64 v1:64;
  __tsu64 v2:64;
  signed __tsi64 v3:64;
};
//SIG(1 BFs64_BFu64_BFs64) C1{ FL:64 FL:64 FL:64}



static void Test_BFs64_BFu64_BFs64()
{
  {
    init_simple_test("BFs64_BFu64_BFs64");
    static STRUCT_IF_C BFs64_BFu64_BFs64 lv;
    check2(sizeof(lv), 24, "sizeof(BFs64_BFu64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFu64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFu64_BFs64, BFs64_BFu64_BFs64)
//============================================================================


struct  BFs64_BFu64_BFs64_BFs64  {
  signed __tsi64 v1:64;
  __tsu64 v2:64;
  signed __tsi64 v3:64;
  signed __tsi64 v4:64;
};
//SIG(1 BFs64_BFu64_BFs64_BFs64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFs64_BFu64_BFs64_BFs64()
{
  {
    init_simple_test("BFs64_BFu64_BFs64_BFs64");
    static STRUCT_IF_C BFs64_BFu64_BFs64_BFs64 lv;
    check2(sizeof(lv), 32, "sizeof(BFs64_BFu64_BFs64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFu64_BFs64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFs64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFs64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFu64_BFs64_BFs64, BFs64_BFu64_BFs64_BFs64)
//============================================================================


struct  BFs64_BFu64_BFs64_BFu64  {
  signed __tsi64 v1:64;
  __tsu64 v2:64;
  signed __tsi64 v3:64;
  __tsu64 v4:64;
};
//SIG(1 BFs64_BFu64_BFs64_BFu64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFs64_BFu64_BFs64_BFu64()
{
  {
    init_simple_test("BFs64_BFu64_BFs64_BFu64");
    static STRUCT_IF_C BFs64_BFu64_BFs64_BFu64 lv;
    check2(sizeof(lv), 32, "sizeof(BFs64_BFu64_BFs64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFu64_BFs64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFs64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFs64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFu64_BFs64_BFu64, BFs64_BFu64_BFs64_BFu64)
//============================================================================


struct  BFs64_BFu64_BFu64  {
  signed __tsi64 v1:64;
  __tsu64 v2:64;
  __tsu64 v3:64;
};
//SIG(1 BFs64_BFu64_BFu64) C1{ FL:64 FL:64 FL:64}



static void Test_BFs64_BFu64_BFu64()
{
  {
    init_simple_test("BFs64_BFu64_BFu64");
    static STRUCT_IF_C BFs64_BFu64_BFu64 lv;
    check2(sizeof(lv), 24, "sizeof(BFs64_BFu64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFu64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFu64_BFu64, BFs64_BFu64_BFu64)
//============================================================================


struct  BFs64_BFu64_BFu64_BFs64  {
  signed __tsi64 v1:64;
  __tsu64 v2:64;
  __tsu64 v3:64;
  signed __tsi64 v4:64;
};
//SIG(1 BFs64_BFu64_BFu64_BFs64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFs64_BFu64_BFu64_BFs64()
{
  {
    init_simple_test("BFs64_BFu64_BFu64_BFs64");
    static STRUCT_IF_C BFs64_BFu64_BFu64_BFs64 lv;
    check2(sizeof(lv), 32, "sizeof(BFs64_BFu64_BFu64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFu64_BFu64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFs64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFu64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFu64_BFu64_BFs64, BFs64_BFu64_BFu64_BFs64)
//============================================================================


struct  BFs64_BFu64_BFu64_BFu64  {
  signed __tsi64 v1:64;
  __tsu64 v2:64;
  __tsu64 v3:64;
  __tsu64 v4:64;
};
//SIG(1 BFs64_BFu64_BFu64_BFu64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFs64_BFu64_BFu64_BFu64()
{
  {
    init_simple_test("BFs64_BFu64_BFu64_BFu64");
    static STRUCT_IF_C BFs64_BFu64_BFu64_BFu64 lv;
    check2(sizeof(lv), 32, "sizeof(BFs64_BFu64_BFu64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs64_BFu64_BFu64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFs64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_sll(1LL<<63), "BFs64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFs64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFs64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFs64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_ull(1LL<<63), "BFs64_BFu64_BFu64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs64_BFu64_BFu64_BFu64, BFs64_BFu64_BFu64_BFu64)
//============================================================================


struct  BFs7c_BFs7c  {
  signed char v1:7;
  signed char v2:7;
};
//SIG(1 BFs7c_BFs7c) C1{ Fc:7 Fc:7}



static void Test_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7c lv;
    check2(sizeof(lv), 2, "sizeof(BFs7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c, BFs7c_BFs7c)
//============================================================================


struct  BFs7c_BFs7c_BFs7c  {
  signed char v1:7;
  signed char v2:7;
  signed char v3:7;
};
//SIG(1 BFs7c_BFs7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 3, "sizeof(BFs7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7c, BFs7c_BFs7c_BFs7c)
//============================================================================


struct  BFs7c_BFs7c_BFs7c_BFs7c  {
  signed char v1:7;
  signed char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFs7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7c_BFs7c, BFs7c_BFs7c_BFs7c_BFs7c)
//============================================================================


struct  BFs7c_BFs7c_BFs7c_BFs7i  {
  signed char v1:7;
  signed char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7c_BFs7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7c_BFs7i, BFs7c_BFs7c_BFs7c_BFs7i)
//============================================================================


struct  BFs7c_BFs7c_BFs7c_BFs7ll  {
  signed char v1:7;
  signed char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7c_BFs7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7c_BFs7ll, BFs7c_BFs7c_BFs7c_BFs7ll)
//============================================================================


struct  BFs7c_BFs7c_BFs7c_BFs7s  {
  signed char v1:7;
  signed char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7c_BFs7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7c_BFs7s, BFs7c_BFs7c_BFs7c_BFs7s)
//============================================================================


struct  BFs7c_BFs7c_BFs7c_BFu7c  {
  signed char v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFs7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7c_BFu7c, BFs7c_BFs7c_BFs7c_BFu7c)
//============================================================================


struct  BFs7c_BFs7c_BFs7c_BFu7i  {
  signed char v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7c_BFu7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7c_BFu7i, BFs7c_BFs7c_BFs7c_BFu7i)
//============================================================================


struct  BFs7c_BFs7c_BFs7c_BFu7ll  {
  signed char v1:7;
  signed char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7c_BFu7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7c_BFu7ll, BFs7c_BFs7c_BFs7c_BFu7ll)
//============================================================================


struct  BFs7c_BFs7c_BFs7c_BFu7s  {
  signed char v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7c_BFu7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7c_BFu7s, BFs7c_BFs7c_BFs7c_BFu7s)
//============================================================================


struct  BFs7c_BFs7c_BFs7i  {
  signed char v1:7;
  signed char v2:7;
  signed int v3:7;
};
//SIG(1 BFs7c_BFs7c_BFs7i) C1{ Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7i, BFs7c_BFs7c_BFs7i)
//============================================================================


struct  BFs7c_BFs7c_BFs7i_BFs7c  {
  signed char v1:7;
  signed char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7i_BFs7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7i_BFs7c, BFs7c_BFs7c_BFs7i_BFs7c)
//============================================================================


struct  BFs7c_BFs7c_BFs7i_BFs7i  {
  signed char v1:7;
  signed char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7i_BFs7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7i_BFs7i, BFs7c_BFs7c_BFs7i_BFs7i)
//============================================================================


struct  BFs7c_BFs7c_BFs7i_BFs7ll  {
  signed char v1:7;
  signed char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7i_BFs7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7i_BFs7ll, BFs7c_BFs7c_BFs7i_BFs7ll)
//============================================================================


struct  BFs7c_BFs7c_BFs7i_BFs7s  {
  signed char v1:7;
  signed char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7i_BFs7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7i_BFs7s, BFs7c_BFs7c_BFs7i_BFs7s)
//============================================================================


struct  BFs7c_BFs7c_BFs7i_BFu7c  {
  signed char v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7i_BFu7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7i_BFu7c, BFs7c_BFs7c_BFs7i_BFu7c)
//============================================================================


struct  BFs7c_BFs7c_BFs7i_BFu7i  {
  signed char v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7i_BFu7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7i_BFu7i, BFs7c_BFs7c_BFs7i_BFu7i)
//============================================================================


struct  BFs7c_BFs7c_BFs7i_BFu7ll  {
  signed char v1:7;
  signed char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7i_BFu7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7i_BFu7ll, BFs7c_BFs7c_BFs7i_BFu7ll)
//============================================================================


struct  BFs7c_BFs7c_BFs7i_BFu7s  {
  signed char v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7i_BFu7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7i_BFu7s, BFs7c_BFs7c_BFs7i_BFu7s)
//============================================================================


struct  BFs7c_BFs7c_BFs7ll  {
  signed char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7c_BFs7c_BFs7ll) C1{ Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7ll, BFs7c_BFs7c_BFs7ll)
//============================================================================


struct  BFs7c_BFs7c_BFs7ll_BFs7c  {
  signed char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7ll_BFs7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7ll_BFs7c, BFs7c_BFs7c_BFs7ll_BFs7c)
//============================================================================


struct  BFs7c_BFs7c_BFs7ll_BFs7i  {
  signed char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7ll_BFs7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7ll_BFs7i, BFs7c_BFs7c_BFs7ll_BFs7i)
//============================================================================


struct  BFs7c_BFs7c_BFs7ll_BFs7ll  {
  signed char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7ll_BFs7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFs7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7ll_BFs7ll, BFs7c_BFs7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFs7c_BFs7ll_BFs7s  {
  signed char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7ll_BFs7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7ll_BFs7s, BFs7c_BFs7c_BFs7ll_BFs7s)
//============================================================================


struct  BFs7c_BFs7c_BFs7ll_BFu7c  {
  signed char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7ll_BFu7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7ll_BFu7c, BFs7c_BFs7c_BFs7ll_BFu7c)
//============================================================================


struct  BFs7c_BFs7c_BFs7ll_BFu7i  {
  signed char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7ll_BFu7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7ll_BFu7i, BFs7c_BFs7c_BFs7ll_BFu7i)
//============================================================================


struct  BFs7c_BFs7c_BFs7ll_BFu7ll  {
  signed char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7ll_BFu7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFs7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7ll_BFu7ll, BFs7c_BFs7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFs7c_BFs7ll_BFu7s  {
  signed char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7ll_BFu7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7ll_BFu7s, BFs7c_BFs7c_BFs7ll_BFu7s)
//============================================================================


struct  BFs7c_BFs7c_BFs7s  {
  signed char v1:7;
  signed char v2:7;
  signed short v3:7;
};
//SIG(1 BFs7c_BFs7c_BFs7s) C1{ Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7s, BFs7c_BFs7c_BFs7s)
//============================================================================


struct  BFs7c_BFs7c_BFs7s_BFs7c  {
  signed char v1:7;
  signed char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7s_BFs7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7s_BFs7c, BFs7c_BFs7c_BFs7s_BFs7c)
//============================================================================


struct  BFs7c_BFs7c_BFs7s_BFs7i  {
  signed char v1:7;
  signed char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7s_BFs7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7s_BFs7i, BFs7c_BFs7c_BFs7s_BFs7i)
//============================================================================


struct  BFs7c_BFs7c_BFs7s_BFs7ll  {
  signed char v1:7;
  signed char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7s_BFs7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7s_BFs7ll, BFs7c_BFs7c_BFs7s_BFs7ll)
//============================================================================


struct  BFs7c_BFs7c_BFs7s_BFs7s  {
  signed char v1:7;
  signed char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7s_BFs7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7s_BFs7s, BFs7c_BFs7c_BFs7s_BFs7s)
//============================================================================


struct  BFs7c_BFs7c_BFs7s_BFu7c  {
  signed char v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7s_BFu7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7s_BFu7c, BFs7c_BFs7c_BFs7s_BFu7c)
//============================================================================


struct  BFs7c_BFs7c_BFs7s_BFu7i  {
  signed char v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7s_BFu7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7s_BFu7i, BFs7c_BFs7c_BFs7s_BFu7i)
//============================================================================


struct  BFs7c_BFs7c_BFs7s_BFu7ll  {
  signed char v1:7;
  signed char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7s_BFu7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7s_BFu7ll, BFs7c_BFs7c_BFs7s_BFu7ll)
//============================================================================


struct  BFs7c_BFs7c_BFs7s_BFu7s  {
  signed char v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFs7s_BFu7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFs7s_BFu7s, BFs7c_BFs7c_BFs7s_BFu7s)
//============================================================================


struct  BFs7c_BFs7c_BFu7c  {
  signed char v1:7;
  signed char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7c_BFs7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(BFs7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7c, BFs7c_BFs7c_BFu7c)
//============================================================================


struct  BFs7c_BFs7c_BFu7c_BFs7c  {
  signed char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFs7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7c_BFs7c, BFs7c_BFs7c_BFu7c_BFs7c)
//============================================================================


struct  BFs7c_BFs7c_BFu7c_BFs7i  {
  signed char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7c_BFs7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7c_BFs7i, BFs7c_BFs7c_BFu7c_BFs7i)
//============================================================================


struct  BFs7c_BFs7c_BFu7c_BFs7ll  {
  signed char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7c_BFs7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7c_BFs7ll, BFs7c_BFs7c_BFu7c_BFs7ll)
//============================================================================


struct  BFs7c_BFs7c_BFu7c_BFs7s  {
  signed char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7c_BFs7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7c_BFs7s, BFs7c_BFs7c_BFu7c_BFs7s)
//============================================================================


struct  BFs7c_BFs7c_BFu7c_BFu7c  {
  signed char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFs7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7c_BFu7c, BFs7c_BFs7c_BFu7c_BFu7c)
//============================================================================


struct  BFs7c_BFs7c_BFu7c_BFu7i  {
  signed char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7c_BFu7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7c_BFu7i, BFs7c_BFs7c_BFu7c_BFu7i)
//============================================================================


struct  BFs7c_BFs7c_BFu7c_BFu7ll  {
  signed char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7c_BFu7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7c_BFu7ll, BFs7c_BFs7c_BFu7c_BFu7ll)
//============================================================================


struct  BFs7c_BFs7c_BFu7c_BFu7s  {
  signed char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7c_BFu7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7c_BFu7s, BFs7c_BFs7c_BFu7c_BFu7s)
//============================================================================


struct  BFs7c_BFs7c_BFu7i  {
  signed char v1:7;
  signed char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7c_BFs7c_BFu7i) C1{ Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7i, BFs7c_BFs7c_BFu7i)
//============================================================================


struct  BFs7c_BFs7c_BFu7i_BFs7c  {
  signed char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7i_BFs7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7i_BFs7c, BFs7c_BFs7c_BFu7i_BFs7c)
//============================================================================


struct  BFs7c_BFs7c_BFu7i_BFs7i  {
  signed char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7i_BFs7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7i_BFs7i, BFs7c_BFs7c_BFu7i_BFs7i)
//============================================================================


struct  BFs7c_BFs7c_BFu7i_BFs7ll  {
  signed char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7i_BFs7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7i_BFs7ll, BFs7c_BFs7c_BFu7i_BFs7ll)
//============================================================================


struct  BFs7c_BFs7c_BFu7i_BFs7s  {
  signed char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7i_BFs7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7i_BFs7s, BFs7c_BFs7c_BFu7i_BFs7s)
//============================================================================


struct  BFs7c_BFs7c_BFu7i_BFu7c  {
  signed char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7i_BFu7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7i_BFu7c, BFs7c_BFs7c_BFu7i_BFu7c)
//============================================================================


struct  BFs7c_BFs7c_BFu7i_BFu7i  {
  signed char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7i_BFu7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7i_BFu7i, BFs7c_BFs7c_BFu7i_BFu7i)
//============================================================================


struct  BFs7c_BFs7c_BFu7i_BFu7ll  {
  signed char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7i_BFu7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7i_BFu7ll, BFs7c_BFs7c_BFu7i_BFu7ll)
//============================================================================


struct  BFs7c_BFs7c_BFu7i_BFu7s  {
  signed char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7i_BFu7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7i_BFu7s, BFs7c_BFs7c_BFu7i_BFu7s)
//============================================================================


struct  BFs7c_BFs7c_BFu7ll  {
  signed char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7c_BFs7c_BFu7ll) C1{ Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7ll, BFs7c_BFs7c_BFu7ll)
//============================================================================


struct  BFs7c_BFs7c_BFu7ll_BFs7c  {
  signed char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7ll_BFs7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7ll_BFs7c, BFs7c_BFs7c_BFu7ll_BFs7c)
//============================================================================


struct  BFs7c_BFs7c_BFu7ll_BFs7i  {
  signed char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7ll_BFs7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7ll_BFs7i, BFs7c_BFs7c_BFu7ll_BFs7i)
//============================================================================


struct  BFs7c_BFs7c_BFu7ll_BFs7ll  {
  signed char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7ll_BFs7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFs7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7ll_BFs7ll, BFs7c_BFs7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFs7c_BFu7ll_BFs7s  {
  signed char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7ll_BFs7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7ll_BFs7s, BFs7c_BFs7c_BFu7ll_BFs7s)
//============================================================================


struct  BFs7c_BFs7c_BFu7ll_BFu7c  {
  signed char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7ll_BFu7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7ll_BFu7c, BFs7c_BFs7c_BFu7ll_BFu7c)
//============================================================================


struct  BFs7c_BFs7c_BFu7ll_BFu7i  {
  signed char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7ll_BFu7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7ll_BFu7i, BFs7c_BFs7c_BFu7ll_BFu7i)
//============================================================================


struct  BFs7c_BFs7c_BFu7ll_BFu7ll  {
  signed char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7ll_BFu7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFs7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7ll_BFu7ll, BFs7c_BFs7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFs7c_BFu7ll_BFu7s  {
  signed char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7ll_BFu7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7ll_BFu7s, BFs7c_BFs7c_BFu7ll_BFu7s)
//============================================================================


struct  BFs7c_BFs7c_BFu7s  {
  signed char v1:7;
  signed char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7c_BFs7c_BFu7s) C1{ Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7s, BFs7c_BFs7c_BFu7s)
//============================================================================


struct  BFs7c_BFs7c_BFu7s_BFs7c  {
  signed char v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7s_BFs7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7s_BFs7c, BFs7c_BFs7c_BFu7s_BFs7c)
//============================================================================


struct  BFs7c_BFs7c_BFu7s_BFs7i  {
  signed char v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7s_BFs7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7s_BFs7i, BFs7c_BFs7c_BFu7s_BFs7i)
//============================================================================


struct  BFs7c_BFs7c_BFu7s_BFs7ll  {
  signed char v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7s_BFs7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7s_BFs7ll, BFs7c_BFs7c_BFu7s_BFs7ll)
//============================================================================


struct  BFs7c_BFs7c_BFu7s_BFs7s  {
  signed char v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7s_BFs7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7s_BFs7s, BFs7c_BFs7c_BFu7s_BFs7s)
//============================================================================


struct  BFs7c_BFs7c_BFu7s_BFu7c  {
  signed char v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7s_BFu7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7s_BFu7c, BFs7c_BFs7c_BFu7s_BFu7c)
//============================================================================


struct  BFs7c_BFs7c_BFu7s_BFu7i  {
  signed char v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7s_BFu7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7s_BFu7i, BFs7c_BFs7c_BFu7s_BFu7i)
//============================================================================


struct  BFs7c_BFs7c_BFu7s_BFu7ll  {
  signed char v1:7;
  signed char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7s_BFu7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7s_BFu7ll, BFs7c_BFs7c_BFu7s_BFu7ll)
//============================================================================


struct  BFs7c_BFs7c_BFu7s_BFu7s  {
  signed char v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7c_BFu7s_BFu7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7c_BFu7s_BFu7s, BFs7c_BFs7c_BFu7s_BFu7s)
//============================================================================


struct  BFs7c_BFs7i  {
  signed char v1:7;
  signed int v2:7;
};
//SIG(1 BFs7c_BFs7i) C1{ Fc:7 Fi:7}



static void Test_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i, BFs7c_BFs7i)
//============================================================================


struct  BFs7c_BFs7i_BFs7c  {
  signed char v1:7;
  signed int v2:7;
  signed char v3:7;
};
//SIG(1 BFs7c_BFs7i_BFs7c) C1{ Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7c, BFs7c_BFs7i_BFs7c)
//============================================================================


struct  BFs7c_BFs7i_BFs7c_BFs7c  {
  signed char v1:7;
  signed int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7c_BFs7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7c_BFs7c, BFs7c_BFs7i_BFs7c_BFs7c)
//============================================================================


struct  BFs7c_BFs7i_BFs7c_BFs7i  {
  signed char v1:7;
  signed int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7c_BFs7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7c_BFs7i, BFs7c_BFs7i_BFs7c_BFs7i)
//============================================================================


struct  BFs7c_BFs7i_BFs7c_BFs7ll  {
  signed char v1:7;
  signed int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7c_BFs7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7c_BFs7ll, BFs7c_BFs7i_BFs7c_BFs7ll)
//============================================================================


struct  BFs7c_BFs7i_BFs7c_BFs7s  {
  signed char v1:7;
  signed int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7c_BFs7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7c_BFs7s, BFs7c_BFs7i_BFs7c_BFs7s)
//============================================================================


struct  BFs7c_BFs7i_BFs7c_BFu7c  {
  signed char v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7c_BFu7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7c_BFu7c, BFs7c_BFs7i_BFs7c_BFu7c)
//============================================================================


struct  BFs7c_BFs7i_BFs7c_BFu7i  {
  signed char v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7c_BFu7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7c_BFu7i, BFs7c_BFs7i_BFs7c_BFu7i)
//============================================================================


struct  BFs7c_BFs7i_BFs7c_BFu7ll  {
  signed char v1:7;
  signed int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7c_BFu7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7c_BFu7ll, BFs7c_BFs7i_BFs7c_BFu7ll)
//============================================================================


struct  BFs7c_BFs7i_BFs7c_BFu7s  {
  signed char v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7c_BFu7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7c_BFu7s, BFs7c_BFs7i_BFs7c_BFu7s)
//============================================================================


struct  BFs7c_BFs7i_BFs7i  {
  signed char v1:7;
  signed int v2:7;
  signed int v3:7;
};
//SIG(1 BFs7c_BFs7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7i, BFs7c_BFs7i_BFs7i)
//============================================================================


struct  BFs7c_BFs7i_BFs7i_BFs7c  {
  signed char v1:7;
  signed int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7i_BFs7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7i_BFs7c, BFs7c_BFs7i_BFs7i_BFs7c)
//============================================================================


struct  BFs7c_BFs7i_BFs7i_BFs7i  {
  signed char v1:7;
  signed int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7i_BFs7i, BFs7c_BFs7i_BFs7i_BFs7i)
//============================================================================


struct  BFs7c_BFs7i_BFs7i_BFs7ll  {
  signed char v1:7;
  signed int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7i_BFs7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7i_BFs7ll, BFs7c_BFs7i_BFs7i_BFs7ll)
//============================================================================


struct  BFs7c_BFs7i_BFs7i_BFs7s  {
  signed char v1:7;
  signed int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7i_BFs7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7i_BFs7s, BFs7c_BFs7i_BFs7i_BFs7s)
//============================================================================


struct  BFs7c_BFs7i_BFs7i_BFu7c  {
  signed char v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7i_BFu7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7i_BFu7c, BFs7c_BFs7i_BFs7i_BFu7c)
//============================================================================


struct  BFs7c_BFs7i_BFs7i_BFu7i  {
  signed char v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7i_BFu7i, BFs7c_BFs7i_BFs7i_BFu7i)
//============================================================================


struct  BFs7c_BFs7i_BFs7i_BFu7ll  {
  signed char v1:7;
  signed int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7i_BFu7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7i_BFu7ll, BFs7c_BFs7i_BFs7i_BFu7ll)
//============================================================================


struct  BFs7c_BFs7i_BFs7i_BFu7s  {
  signed char v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7i_BFu7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7i_BFu7s, BFs7c_BFs7i_BFs7i_BFu7s)
//============================================================================


struct  BFs7c_BFs7i_BFs7ll  {
  signed char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7c_BFs7i_BFs7ll) C1{ Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7ll, BFs7c_BFs7i_BFs7ll)
//============================================================================


struct  BFs7c_BFs7i_BFs7ll_BFs7c  {
  signed char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7ll_BFs7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7ll_BFs7c, BFs7c_BFs7i_BFs7ll_BFs7c)
//============================================================================


struct  BFs7c_BFs7i_BFs7ll_BFs7i  {
  signed char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7ll_BFs7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7ll_BFs7i, BFs7c_BFs7i_BFs7ll_BFs7i)
//============================================================================


struct  BFs7c_BFs7i_BFs7ll_BFs7ll  {
  signed char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7ll_BFs7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFs7c_BFs7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7ll_BFs7ll, BFs7c_BFs7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFs7i_BFs7ll_BFs7s  {
  signed char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7ll_BFs7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7ll_BFs7s, BFs7c_BFs7i_BFs7ll_BFs7s)
//============================================================================


struct  BFs7c_BFs7i_BFs7ll_BFu7c  {
  signed char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7ll_BFu7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7ll_BFu7c, BFs7c_BFs7i_BFs7ll_BFu7c)
//============================================================================


struct  BFs7c_BFs7i_BFs7ll_BFu7i  {
  signed char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7ll_BFu7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7ll_BFu7i, BFs7c_BFs7i_BFs7ll_BFu7i)
//============================================================================


struct  BFs7c_BFs7i_BFs7ll_BFu7ll  {
  signed char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7ll_BFu7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFs7c_BFs7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7ll_BFu7ll, BFs7c_BFs7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFs7i_BFs7ll_BFu7s  {
  signed char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7ll_BFu7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7ll_BFu7s, BFs7c_BFs7i_BFs7ll_BFu7s)
//============================================================================


struct  BFs7c_BFs7i_BFs7s  {
  signed char v1:7;
  signed int v2:7;
  signed short v3:7;
};
//SIG(1 BFs7c_BFs7i_BFs7s) C1{ Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7s, BFs7c_BFs7i_BFs7s)
//============================================================================


struct  BFs7c_BFs7i_BFs7s_BFs7c  {
  signed char v1:7;
  signed int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7s_BFs7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7s_BFs7c, BFs7c_BFs7i_BFs7s_BFs7c)
//============================================================================


struct  BFs7c_BFs7i_BFs7s_BFs7i  {
  signed char v1:7;
  signed int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7s_BFs7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7s_BFs7i, BFs7c_BFs7i_BFs7s_BFs7i)
//============================================================================


struct  BFs7c_BFs7i_BFs7s_BFs7ll  {
  signed char v1:7;
  signed int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7s_BFs7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7s_BFs7ll, BFs7c_BFs7i_BFs7s_BFs7ll)
//============================================================================


struct  BFs7c_BFs7i_BFs7s_BFs7s  {
  signed char v1:7;
  signed int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7s_BFs7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7s_BFs7s, BFs7c_BFs7i_BFs7s_BFs7s)
//============================================================================


struct  BFs7c_BFs7i_BFs7s_BFu7c  {
  signed char v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7s_BFu7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7s_BFu7c, BFs7c_BFs7i_BFs7s_BFu7c)
//============================================================================


struct  BFs7c_BFs7i_BFs7s_BFu7i  {
  signed char v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7s_BFu7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7s_BFu7i, BFs7c_BFs7i_BFs7s_BFu7i)
//============================================================================


struct  BFs7c_BFs7i_BFs7s_BFu7ll  {
  signed char v1:7;
  signed int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7s_BFu7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7s_BFu7ll, BFs7c_BFs7i_BFs7s_BFu7ll)
//============================================================================


struct  BFs7c_BFs7i_BFs7s_BFu7s  {
  signed char v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFs7s_BFu7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFs7s_BFu7s, BFs7c_BFs7i_BFs7s_BFu7s)
//============================================================================


struct  BFs7c_BFs7i_BFu7c  {
  signed char v1:7;
  signed int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7c_BFs7i_BFu7c) C1{ Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7c, BFs7c_BFs7i_BFu7c)
//============================================================================


struct  BFs7c_BFs7i_BFu7c_BFs7c  {
  signed char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7c_BFs7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7c_BFs7c, BFs7c_BFs7i_BFu7c_BFs7c)
//============================================================================


struct  BFs7c_BFs7i_BFu7c_BFs7i  {
  signed char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7c_BFs7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7c_BFs7i, BFs7c_BFs7i_BFu7c_BFs7i)
//============================================================================


struct  BFs7c_BFs7i_BFu7c_BFs7ll  {
  signed char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7c_BFs7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7c_BFs7ll, BFs7c_BFs7i_BFu7c_BFs7ll)
//============================================================================


struct  BFs7c_BFs7i_BFu7c_BFs7s  {
  signed char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7c_BFs7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7c_BFs7s, BFs7c_BFs7i_BFu7c_BFs7s)
//============================================================================


struct  BFs7c_BFs7i_BFu7c_BFu7c  {
  signed char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7c_BFu7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7c_BFu7c, BFs7c_BFs7i_BFu7c_BFu7c)
//============================================================================


struct  BFs7c_BFs7i_BFu7c_BFu7i  {
  signed char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7c_BFu7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7c_BFu7i, BFs7c_BFs7i_BFu7c_BFu7i)
//============================================================================


struct  BFs7c_BFs7i_BFu7c_BFu7ll  {
  signed char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7c_BFu7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7c_BFu7ll, BFs7c_BFs7i_BFu7c_BFu7ll)
//============================================================================


struct  BFs7c_BFs7i_BFu7c_BFu7s  {
  signed char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7c_BFu7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7c_BFu7s, BFs7c_BFs7i_BFu7c_BFu7s)
//============================================================================


struct  BFs7c_BFs7i_BFu7i  {
  signed char v1:7;
  signed int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7c_BFs7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7i, BFs7c_BFs7i_BFu7i)
//============================================================================


struct  BFs7c_BFs7i_BFu7i_BFs7c  {
  signed char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7i_BFs7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7i_BFs7c, BFs7c_BFs7i_BFu7i_BFs7c)
//============================================================================


struct  BFs7c_BFs7i_BFu7i_BFs7i  {
  signed char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7i_BFs7i, BFs7c_BFs7i_BFu7i_BFs7i)
//============================================================================


struct  BFs7c_BFs7i_BFu7i_BFs7ll  {
  signed char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7i_BFs7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7i_BFs7ll, BFs7c_BFs7i_BFu7i_BFs7ll)
//============================================================================


struct  BFs7c_BFs7i_BFu7i_BFs7s  {
  signed char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7i_BFs7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7i_BFs7s, BFs7c_BFs7i_BFu7i_BFs7s)
//============================================================================


struct  BFs7c_BFs7i_BFu7i_BFu7c  {
  signed char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7i_BFu7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7i_BFu7c, BFs7c_BFs7i_BFu7i_BFu7c)
//============================================================================


struct  BFs7c_BFs7i_BFu7i_BFu7i  {
  signed char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7i_BFu7i, BFs7c_BFs7i_BFu7i_BFu7i)
//============================================================================


struct  BFs7c_BFs7i_BFu7i_BFu7ll  {
  signed char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7i_BFu7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7i_BFu7ll, BFs7c_BFs7i_BFu7i_BFu7ll)
//============================================================================


struct  BFs7c_BFs7i_BFu7i_BFu7s  {
  signed char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7i_BFu7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7i_BFu7s, BFs7c_BFs7i_BFu7i_BFu7s)
//============================================================================


struct  BFs7c_BFs7i_BFu7ll  {
  signed char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7c_BFs7i_BFu7ll) C1{ Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7ll, BFs7c_BFs7i_BFu7ll)
//============================================================================


struct  BFs7c_BFs7i_BFu7ll_BFs7c  {
  signed char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7ll_BFs7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7ll_BFs7c, BFs7c_BFs7i_BFu7ll_BFs7c)
//============================================================================


struct  BFs7c_BFs7i_BFu7ll_BFs7i  {
  signed char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7ll_BFs7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7ll_BFs7i, BFs7c_BFs7i_BFu7ll_BFs7i)
//============================================================================


struct  BFs7c_BFs7i_BFu7ll_BFs7ll  {
  signed char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7ll_BFs7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFs7c_BFs7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7ll_BFs7ll, BFs7c_BFs7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFs7i_BFu7ll_BFs7s  {
  signed char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7ll_BFs7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7ll_BFs7s, BFs7c_BFs7i_BFu7ll_BFs7s)
//============================================================================


struct  BFs7c_BFs7i_BFu7ll_BFu7c  {
  signed char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7ll_BFu7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7ll_BFu7c, BFs7c_BFs7i_BFu7ll_BFu7c)
//============================================================================


struct  BFs7c_BFs7i_BFu7ll_BFu7i  {
  signed char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7ll_BFu7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7ll_BFu7i, BFs7c_BFs7i_BFu7ll_BFu7i)
//============================================================================


struct  BFs7c_BFs7i_BFu7ll_BFu7ll  {
  signed char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7ll_BFu7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFs7c_BFs7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7ll_BFu7ll, BFs7c_BFs7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFs7i_BFu7ll_BFu7s  {
  signed char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7ll_BFu7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7ll_BFu7s, BFs7c_BFs7i_BFu7ll_BFu7s)
//============================================================================


struct  BFs7c_BFs7i_BFu7s  {
  signed char v1:7;
  signed int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7c_BFs7i_BFu7s) C1{ Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7s, BFs7c_BFs7i_BFu7s)
//============================================================================


struct  BFs7c_BFs7i_BFu7s_BFs7c  {
  signed char v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7s_BFs7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7s_BFs7c, BFs7c_BFs7i_BFu7s_BFs7c)
//============================================================================


struct  BFs7c_BFs7i_BFu7s_BFs7i  {
  signed char v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7s_BFs7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7s_BFs7i, BFs7c_BFs7i_BFu7s_BFs7i)
//============================================================================


struct  BFs7c_BFs7i_BFu7s_BFs7ll  {
  signed char v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7s_BFs7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7s_BFs7ll, BFs7c_BFs7i_BFu7s_BFs7ll)
//============================================================================


struct  BFs7c_BFs7i_BFu7s_BFs7s  {
  signed char v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7s_BFs7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7s_BFs7s, BFs7c_BFs7i_BFu7s_BFs7s)
//============================================================================


struct  BFs7c_BFs7i_BFu7s_BFu7c  {
  signed char v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7s_BFu7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7s_BFu7c, BFs7c_BFs7i_BFu7s_BFu7c)
//============================================================================


struct  BFs7c_BFs7i_BFu7s_BFu7i  {
  signed char v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7s_BFu7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7s_BFu7i, BFs7c_BFs7i_BFu7s_BFu7i)
//============================================================================


struct  BFs7c_BFs7i_BFu7s_BFu7ll  {
  signed char v1:7;
  signed int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7s_BFu7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7s_BFu7ll, BFs7c_BFs7i_BFu7s_BFu7ll)
//============================================================================


struct  BFs7c_BFs7i_BFu7s_BFu7s  {
  signed char v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7i_BFu7s_BFu7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7i_BFu7s_BFu7s, BFs7c_BFs7i_BFu7s_BFu7s)
//============================================================================


struct  BFs7c_BFs7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
};
//SIG(1 BFs7c_BFs7ll) C1{ Fc:7 FL:7}



static void Test_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll, BFs7c_BFs7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFs7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7c) C1{ Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7c, BFs7c_BFs7ll_BFs7c)
//============================================================================


struct  BFs7c_BFs7ll_BFs7c_BFs7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7c_BFs7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7c_BFs7c, BFs7c_BFs7ll_BFs7c_BFs7c)
//============================================================================


struct  BFs7c_BFs7ll_BFs7c_BFs7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7c_BFs7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7c_BFs7i, BFs7c_BFs7ll_BFs7c_BFs7i)
//============================================================================


struct  BFs7c_BFs7ll_BFs7c_BFs7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7c_BFs7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7c_BFs7ll, BFs7c_BFs7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFs7c_BFs7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7c_BFs7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7c_BFs7s, BFs7c_BFs7ll_BFs7c_BFs7s)
//============================================================================


struct  BFs7c_BFs7ll_BFs7c_BFu7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7c_BFu7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7c_BFu7c, BFs7c_BFs7ll_BFs7c_BFu7c)
//============================================================================


struct  BFs7c_BFs7ll_BFs7c_BFu7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7c_BFu7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7c_BFu7i, BFs7c_BFs7ll_BFs7c_BFu7i)
//============================================================================


struct  BFs7c_BFs7ll_BFs7c_BFu7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7c_BFu7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7c_BFu7ll, BFs7c_BFs7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFs7c_BFu7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7c_BFu7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7c_BFu7s, BFs7c_BFs7ll_BFs7c_BFu7s)
//============================================================================


struct  BFs7c_BFs7ll_BFs7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7i) C1{ Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7i, BFs7c_BFs7ll_BFs7i)
//============================================================================


struct  BFs7c_BFs7ll_BFs7i_BFs7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7i_BFs7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7i_BFs7c, BFs7c_BFs7ll_BFs7i_BFs7c)
//============================================================================


struct  BFs7c_BFs7ll_BFs7i_BFs7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7i_BFs7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7i_BFs7i, BFs7c_BFs7ll_BFs7i_BFs7i)
//============================================================================


struct  BFs7c_BFs7ll_BFs7i_BFs7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7i_BFs7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7i_BFs7ll, BFs7c_BFs7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFs7i_BFs7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7i_BFs7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7i_BFs7s, BFs7c_BFs7ll_BFs7i_BFs7s)
//============================================================================


struct  BFs7c_BFs7ll_BFs7i_BFu7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7i_BFu7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7i_BFu7c, BFs7c_BFs7ll_BFs7i_BFu7c)
//============================================================================


struct  BFs7c_BFs7ll_BFs7i_BFu7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7i_BFu7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7i_BFu7i, BFs7c_BFs7ll_BFs7i_BFu7i)
//============================================================================


struct  BFs7c_BFs7ll_BFs7i_BFu7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7i_BFu7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7i_BFu7ll, BFs7c_BFs7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFs7i_BFu7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7i_BFu7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7i_BFu7s, BFs7c_BFs7ll_BFs7i_BFu7s)
//============================================================================


struct  BFs7c_BFs7ll_BFs7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7ll, BFs7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFs7ll_BFs7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7ll_BFs7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7ll_BFs7c, BFs7c_BFs7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFs7c_BFs7ll_BFs7ll_BFs7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7ll_BFs7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7ll_BFs7i, BFs7c_BFs7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFs7c_BFs7ll_BFs7ll_BFs7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFs7c_BFs7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7ll_BFs7ll, BFs7c_BFs7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFs7ll_BFs7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7ll_BFs7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7ll_BFs7s, BFs7c_BFs7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFs7c_BFs7ll_BFs7ll_BFu7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7ll_BFu7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7ll_BFu7c, BFs7c_BFs7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFs7c_BFs7ll_BFs7ll_BFu7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7ll_BFu7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7ll_BFu7i, BFs7c_BFs7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFs7c_BFs7ll_BFs7ll_BFu7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFs7c_BFs7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7ll_BFu7ll, BFs7c_BFs7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFs7ll_BFu7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7ll_BFu7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7ll_BFu7s, BFs7c_BFs7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFs7c_BFs7ll_BFs7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7s) C1{ Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7s, BFs7c_BFs7ll_BFs7s)
//============================================================================


struct  BFs7c_BFs7ll_BFs7s_BFs7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7s_BFs7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7s_BFs7c, BFs7c_BFs7ll_BFs7s_BFs7c)
//============================================================================


struct  BFs7c_BFs7ll_BFs7s_BFs7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7s_BFs7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7s_BFs7i, BFs7c_BFs7ll_BFs7s_BFs7i)
//============================================================================


struct  BFs7c_BFs7ll_BFs7s_BFs7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7s_BFs7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7s_BFs7ll, BFs7c_BFs7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFs7s_BFs7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7s_BFs7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7s_BFs7s, BFs7c_BFs7ll_BFs7s_BFs7s)
//============================================================================


struct  BFs7c_BFs7ll_BFs7s_BFu7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7s_BFu7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7s_BFu7c, BFs7c_BFs7ll_BFs7s_BFu7c)
//============================================================================


struct  BFs7c_BFs7ll_BFs7s_BFu7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7s_BFu7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7s_BFu7i, BFs7c_BFs7ll_BFs7s_BFu7i)
//============================================================================


struct  BFs7c_BFs7ll_BFs7s_BFu7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7s_BFu7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7s_BFu7ll, BFs7c_BFs7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFs7s_BFu7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFs7s_BFu7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFs7s_BFu7s, BFs7c_BFs7ll_BFs7s_BFu7s)
//============================================================================


struct  BFs7c_BFs7ll_BFu7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7c) C1{ Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7c, BFs7c_BFs7ll_BFu7c)
//============================================================================


struct  BFs7c_BFs7ll_BFu7c_BFs7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7c_BFs7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7c_BFs7c, BFs7c_BFs7ll_BFu7c_BFs7c)
//============================================================================


struct  BFs7c_BFs7ll_BFu7c_BFs7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7c_BFs7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7c_BFs7i, BFs7c_BFs7ll_BFu7c_BFs7i)
//============================================================================


struct  BFs7c_BFs7ll_BFu7c_BFs7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7c_BFs7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7c_BFs7ll, BFs7c_BFs7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFu7c_BFs7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7c_BFs7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7c_BFs7s, BFs7c_BFs7ll_BFu7c_BFs7s)
//============================================================================


struct  BFs7c_BFs7ll_BFu7c_BFu7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7c_BFu7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7c_BFu7c, BFs7c_BFs7ll_BFu7c_BFu7c)
//============================================================================


struct  BFs7c_BFs7ll_BFu7c_BFu7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7c_BFu7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7c_BFu7i, BFs7c_BFs7ll_BFu7c_BFu7i)
//============================================================================


struct  BFs7c_BFs7ll_BFu7c_BFu7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7c_BFu7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7c_BFu7ll, BFs7c_BFs7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFu7c_BFu7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7c_BFu7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7c_BFu7s, BFs7c_BFs7ll_BFu7c_BFu7s)
//============================================================================


struct  BFs7c_BFs7ll_BFu7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7i) C1{ Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7i, BFs7c_BFs7ll_BFu7i)
//============================================================================


struct  BFs7c_BFs7ll_BFu7i_BFs7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7i_BFs7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7i_BFs7c, BFs7c_BFs7ll_BFu7i_BFs7c)
//============================================================================


struct  BFs7c_BFs7ll_BFu7i_BFs7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7i_BFs7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7i_BFs7i, BFs7c_BFs7ll_BFu7i_BFs7i)
//============================================================================


struct  BFs7c_BFs7ll_BFu7i_BFs7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7i_BFs7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7i_BFs7ll, BFs7c_BFs7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFu7i_BFs7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7i_BFs7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7i_BFs7s, BFs7c_BFs7ll_BFu7i_BFs7s)
//============================================================================


struct  BFs7c_BFs7ll_BFu7i_BFu7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7i_BFu7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7i_BFu7c, BFs7c_BFs7ll_BFu7i_BFu7c)
//============================================================================


struct  BFs7c_BFs7ll_BFu7i_BFu7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7i_BFu7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7i_BFu7i, BFs7c_BFs7ll_BFu7i_BFu7i)
//============================================================================


struct  BFs7c_BFs7ll_BFu7i_BFu7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7i_BFu7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7i_BFu7ll, BFs7c_BFs7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFu7i_BFu7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7i_BFu7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7i_BFu7s, BFs7c_BFs7ll_BFu7i_BFu7s)
//============================================================================


struct  BFs7c_BFs7ll_BFu7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7ll, BFs7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFu7ll_BFs7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7ll_BFs7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7ll_BFs7c, BFs7c_BFs7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFs7c_BFs7ll_BFu7ll_BFs7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7ll_BFs7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7ll_BFs7i, BFs7c_BFs7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFs7c_BFs7ll_BFu7ll_BFs7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFs7c_BFs7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7ll_BFs7ll, BFs7c_BFs7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFu7ll_BFs7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7ll_BFs7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7ll_BFs7s, BFs7c_BFs7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFs7c_BFs7ll_BFu7ll_BFu7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7ll_BFu7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7ll_BFu7c, BFs7c_BFs7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFs7c_BFs7ll_BFu7ll_BFu7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7ll_BFu7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7ll_BFu7i, BFs7c_BFs7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFs7c_BFs7ll_BFu7ll_BFu7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFs7c_BFs7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7ll_BFu7ll, BFs7c_BFs7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFu7ll_BFu7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7ll_BFu7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7ll_BFu7s, BFs7c_BFs7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFs7c_BFs7ll_BFu7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7s) C1{ Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7s, BFs7c_BFs7ll_BFu7s)
//============================================================================


struct  BFs7c_BFs7ll_BFu7s_BFs7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7s_BFs7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7s_BFs7c, BFs7c_BFs7ll_BFu7s_BFs7c)
//============================================================================


struct  BFs7c_BFs7ll_BFu7s_BFs7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7s_BFs7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7s_BFs7i, BFs7c_BFs7ll_BFu7s_BFs7i)
//============================================================================


struct  BFs7c_BFs7ll_BFu7s_BFs7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7s_BFs7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7s_BFs7ll, BFs7c_BFs7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFu7s_BFs7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7s_BFs7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7s_BFs7s, BFs7c_BFs7ll_BFu7s_BFs7s)
//============================================================================


struct  BFs7c_BFs7ll_BFu7s_BFu7c  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7s_BFu7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7s_BFu7c, BFs7c_BFs7ll_BFu7s_BFu7c)
//============================================================================


struct  BFs7c_BFs7ll_BFu7s_BFu7i  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7s_BFu7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7s_BFu7i, BFs7c_BFs7ll_BFu7s_BFu7i)
//============================================================================


struct  BFs7c_BFs7ll_BFu7s_BFu7ll  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7s_BFu7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7s_BFu7ll, BFs7c_BFs7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFs7c_BFs7ll_BFu7s_BFu7s  {
  signed char v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7ll_BFu7s_BFu7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7ll_BFu7s_BFu7s, BFs7c_BFs7ll_BFu7s_BFu7s)
//============================================================================


struct  BFs7c_BFs7s  {
  signed char v1:7;
  signed short v2:7;
};
//SIG(1 BFs7c_BFs7s) C1{ Fc:7 Fs:7}



static void Test_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7s lv;
    check2(sizeof(lv), 2, "sizeof(BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s, BFs7c_BFs7s)
//============================================================================


struct  BFs7c_BFs7s_BFs7c  {
  signed char v1:7;
  signed short v2:7;
  signed char v3:7;
};
//SIG(1 BFs7c_BFs7s_BFs7c) C1{ Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7c, BFs7c_BFs7s_BFs7c)
//============================================================================


struct  BFs7c_BFs7s_BFs7c_BFs7c  {
  signed char v1:7;
  signed short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7c_BFs7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7c_BFs7c, BFs7c_BFs7s_BFs7c_BFs7c)
//============================================================================


struct  BFs7c_BFs7s_BFs7c_BFs7i  {
  signed char v1:7;
  signed short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7c_BFs7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7c_BFs7i, BFs7c_BFs7s_BFs7c_BFs7i)
//============================================================================


struct  BFs7c_BFs7s_BFs7c_BFs7ll  {
  signed char v1:7;
  signed short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7c_BFs7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7c_BFs7ll, BFs7c_BFs7s_BFs7c_BFs7ll)
//============================================================================


struct  BFs7c_BFs7s_BFs7c_BFs7s  {
  signed char v1:7;
  signed short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7c_BFs7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7c_BFs7s, BFs7c_BFs7s_BFs7c_BFs7s)
//============================================================================


struct  BFs7c_BFs7s_BFs7c_BFu7c  {
  signed char v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7c_BFu7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7c_BFu7c, BFs7c_BFs7s_BFs7c_BFu7c)
//============================================================================


struct  BFs7c_BFs7s_BFs7c_BFu7i  {
  signed char v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7c_BFu7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7c_BFu7i, BFs7c_BFs7s_BFs7c_BFu7i)
//============================================================================


struct  BFs7c_BFs7s_BFs7c_BFu7ll  {
  signed char v1:7;
  signed short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7c_BFu7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7c_BFu7ll, BFs7c_BFs7s_BFs7c_BFu7ll)
//============================================================================


struct  BFs7c_BFs7s_BFs7c_BFu7s  {
  signed char v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7c_BFu7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7c_BFu7s, BFs7c_BFs7s_BFs7c_BFu7s)
//============================================================================


struct  BFs7c_BFs7s_BFs7i  {
  signed char v1:7;
  signed short v2:7;
  signed int v3:7;
};
//SIG(1 BFs7c_BFs7s_BFs7i) C1{ Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7i, BFs7c_BFs7s_BFs7i)
//============================================================================


struct  BFs7c_BFs7s_BFs7i_BFs7c  {
  signed char v1:7;
  signed short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7i_BFs7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7i_BFs7c, BFs7c_BFs7s_BFs7i_BFs7c)
//============================================================================


struct  BFs7c_BFs7s_BFs7i_BFs7i  {
  signed char v1:7;
  signed short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7i_BFs7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7i_BFs7i, BFs7c_BFs7s_BFs7i_BFs7i)
//============================================================================


struct  BFs7c_BFs7s_BFs7i_BFs7ll  {
  signed char v1:7;
  signed short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7i_BFs7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7i_BFs7ll, BFs7c_BFs7s_BFs7i_BFs7ll)
//============================================================================


struct  BFs7c_BFs7s_BFs7i_BFs7s  {
  signed char v1:7;
  signed short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7i_BFs7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7i_BFs7s, BFs7c_BFs7s_BFs7i_BFs7s)
//============================================================================


struct  BFs7c_BFs7s_BFs7i_BFu7c  {
  signed char v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7i_BFu7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7i_BFu7c, BFs7c_BFs7s_BFs7i_BFu7c)
//============================================================================


struct  BFs7c_BFs7s_BFs7i_BFu7i  {
  signed char v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7i_BFu7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7i_BFu7i, BFs7c_BFs7s_BFs7i_BFu7i)
//============================================================================


struct  BFs7c_BFs7s_BFs7i_BFu7ll  {
  signed char v1:7;
  signed short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7i_BFu7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7i_BFu7ll, BFs7c_BFs7s_BFs7i_BFu7ll)
//============================================================================


struct  BFs7c_BFs7s_BFs7i_BFu7s  {
  signed char v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7i_BFu7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7i_BFu7s, BFs7c_BFs7s_BFs7i_BFu7s)
//============================================================================


struct  BFs7c_BFs7s_BFs7ll  {
  signed char v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7c_BFs7s_BFs7ll) C1{ Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7ll, BFs7c_BFs7s_BFs7ll)
//============================================================================


struct  BFs7c_BFs7s_BFs7ll_BFs7c  {
  signed char v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7ll_BFs7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7ll_BFs7c, BFs7c_BFs7s_BFs7ll_BFs7c)
//============================================================================


struct  BFs7c_BFs7s_BFs7ll_BFs7i  {
  signed char v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7ll_BFs7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7ll_BFs7i, BFs7c_BFs7s_BFs7ll_BFs7i)
//============================================================================


struct  BFs7c_BFs7s_BFs7ll_BFs7ll  {
  signed char v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7ll_BFs7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFs7c_BFs7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7ll_BFs7ll, BFs7c_BFs7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFs7s_BFs7ll_BFs7s  {
  signed char v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7ll_BFs7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7ll_BFs7s, BFs7c_BFs7s_BFs7ll_BFs7s)
//============================================================================


struct  BFs7c_BFs7s_BFs7ll_BFu7c  {
  signed char v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7ll_BFu7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7ll_BFu7c, BFs7c_BFs7s_BFs7ll_BFu7c)
//============================================================================


struct  BFs7c_BFs7s_BFs7ll_BFu7i  {
  signed char v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7ll_BFu7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7ll_BFu7i, BFs7c_BFs7s_BFs7ll_BFu7i)
//============================================================================


struct  BFs7c_BFs7s_BFs7ll_BFu7ll  {
  signed char v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7ll_BFu7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFs7c_BFs7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7ll_BFu7ll, BFs7c_BFs7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFs7s_BFs7ll_BFu7s  {
  signed char v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7ll_BFu7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7ll_BFu7s, BFs7c_BFs7s_BFs7ll_BFu7s)
//============================================================================


struct  BFs7c_BFs7s_BFs7s  {
  signed char v1:7;
  signed short v2:7;
  signed short v3:7;
};
//SIG(1 BFs7c_BFs7s_BFs7s) C1{ Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7s, BFs7c_BFs7s_BFs7s)
//============================================================================


struct  BFs7c_BFs7s_BFs7s_BFs7c  {
  signed char v1:7;
  signed short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7s_BFs7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7s_BFs7c, BFs7c_BFs7s_BFs7s_BFs7c)
//============================================================================


struct  BFs7c_BFs7s_BFs7s_BFs7i  {
  signed char v1:7;
  signed short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7s_BFs7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7s_BFs7i, BFs7c_BFs7s_BFs7s_BFs7i)
//============================================================================


struct  BFs7c_BFs7s_BFs7s_BFs7ll  {
  signed char v1:7;
  signed short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7s_BFs7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7s_BFs7ll, BFs7c_BFs7s_BFs7s_BFs7ll)
//============================================================================


struct  BFs7c_BFs7s_BFs7s_BFs7s  {
  signed char v1:7;
  signed short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7s_BFs7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7s_BFs7s, BFs7c_BFs7s_BFs7s_BFs7s)
//============================================================================


struct  BFs7c_BFs7s_BFs7s_BFu7c  {
  signed char v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7s_BFu7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7s_BFu7c, BFs7c_BFs7s_BFs7s_BFu7c)
//============================================================================


struct  BFs7c_BFs7s_BFs7s_BFu7i  {
  signed char v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7s_BFu7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7s_BFu7i, BFs7c_BFs7s_BFs7s_BFu7i)
//============================================================================


struct  BFs7c_BFs7s_BFs7s_BFu7ll  {
  signed char v1:7;
  signed short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7s_BFu7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7s_BFu7ll, BFs7c_BFs7s_BFs7s_BFu7ll)
//============================================================================


struct  BFs7c_BFs7s_BFs7s_BFu7s  {
  signed char v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFs7s_BFu7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFs7s_BFu7s, BFs7c_BFs7s_BFs7s_BFu7s)
//============================================================================


struct  BFs7c_BFs7s_BFu7c  {
  signed char v1:7;
  signed short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7c_BFs7s_BFu7c) C1{ Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7c, BFs7c_BFs7s_BFu7c)
//============================================================================


struct  BFs7c_BFs7s_BFu7c_BFs7c  {
  signed char v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7c_BFs7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7c_BFs7c, BFs7c_BFs7s_BFu7c_BFs7c)
//============================================================================


struct  BFs7c_BFs7s_BFu7c_BFs7i  {
  signed char v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7c_BFs7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7c_BFs7i, BFs7c_BFs7s_BFu7c_BFs7i)
//============================================================================


struct  BFs7c_BFs7s_BFu7c_BFs7ll  {
  signed char v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7c_BFs7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7c_BFs7ll, BFs7c_BFs7s_BFu7c_BFs7ll)
//============================================================================


struct  BFs7c_BFs7s_BFu7c_BFs7s  {
  signed char v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7c_BFs7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7c_BFs7s, BFs7c_BFs7s_BFu7c_BFs7s)
//============================================================================


struct  BFs7c_BFs7s_BFu7c_BFu7c  {
  signed char v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7c_BFu7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7c_BFs7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7c_BFu7c, BFs7c_BFs7s_BFu7c_BFu7c)
//============================================================================


struct  BFs7c_BFs7s_BFu7c_BFu7i  {
  signed char v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7c_BFu7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7c_BFs7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7c_BFu7i, BFs7c_BFs7s_BFu7c_BFu7i)
//============================================================================


struct  BFs7c_BFs7s_BFu7c_BFu7ll  {
  signed char v1:7;
  signed short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7c_BFu7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7c_BFs7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7c_BFu7ll, BFs7c_BFs7s_BFu7c_BFu7ll)
//============================================================================


struct  BFs7c_BFs7s_BFu7c_BFu7s  {
  signed char v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7c_BFu7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7c_BFs7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7c_BFu7s, BFs7c_BFs7s_BFu7c_BFu7s)
//============================================================================


struct  BFs7c_BFs7s_BFu7i  {
  signed char v1:7;
  signed short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7c_BFs7s_BFu7i) C1{ Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7i, BFs7c_BFs7s_BFu7i)
//============================================================================


struct  BFs7c_BFs7s_BFu7i_BFs7c  {
  signed char v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7i_BFs7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7i_BFs7c, BFs7c_BFs7s_BFu7i_BFs7c)
//============================================================================


struct  BFs7c_BFs7s_BFu7i_BFs7i  {
  signed char v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7i_BFs7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7i_BFs7i, BFs7c_BFs7s_BFu7i_BFs7i)
//============================================================================


struct  BFs7c_BFs7s_BFu7i_BFs7ll  {
  signed char v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7i_BFs7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7i_BFs7ll, BFs7c_BFs7s_BFu7i_BFs7ll)
//============================================================================


struct  BFs7c_BFs7s_BFu7i_BFs7s  {
  signed char v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7i_BFs7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7i_BFs7s, BFs7c_BFs7s_BFu7i_BFs7s)
//============================================================================


struct  BFs7c_BFs7s_BFu7i_BFu7c  {
  signed char v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7i_BFu7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7c_BFs7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7i_BFu7c, BFs7c_BFs7s_BFu7i_BFu7c)
//============================================================================


struct  BFs7c_BFs7s_BFu7i_BFu7i  {
  signed char v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7i_BFu7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7c_BFs7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7i_BFu7i, BFs7c_BFs7s_BFu7i_BFu7i)
//============================================================================


struct  BFs7c_BFs7s_BFu7i_BFu7ll  {
  signed char v1:7;
  signed short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7i_BFu7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7c_BFs7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7i_BFu7ll, BFs7c_BFs7s_BFu7i_BFu7ll)
//============================================================================


struct  BFs7c_BFs7s_BFu7i_BFu7s  {
  signed char v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7i_BFu7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7c_BFs7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7i_BFu7s, BFs7c_BFs7s_BFu7i_BFu7s)
//============================================================================


struct  BFs7c_BFs7s_BFu7ll  {
  signed char v1:7;
  signed short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7c_BFs7s_BFu7ll) C1{ Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7ll, BFs7c_BFs7s_BFu7ll)
//============================================================================


struct  BFs7c_BFs7s_BFu7ll_BFs7c  {
  signed char v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7ll_BFs7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7ll_BFs7c, BFs7c_BFs7s_BFu7ll_BFs7c)
//============================================================================


struct  BFs7c_BFs7s_BFu7ll_BFs7i  {
  signed char v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7ll_BFs7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7ll_BFs7i, BFs7c_BFs7s_BFu7ll_BFs7i)
//============================================================================


struct  BFs7c_BFs7s_BFu7ll_BFs7ll  {
  signed char v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7ll_BFs7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFs7c_BFs7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7ll_BFs7ll, BFs7c_BFs7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFs7s_BFu7ll_BFs7s  {
  signed char v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7ll_BFs7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7ll_BFs7s, BFs7c_BFs7s_BFu7ll_BFs7s)
//============================================================================


struct  BFs7c_BFs7s_BFu7ll_BFu7c  {
  signed char v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7ll_BFu7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7c_BFs7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7ll_BFu7c, BFs7c_BFs7s_BFu7ll_BFu7c)
//============================================================================


struct  BFs7c_BFs7s_BFu7ll_BFu7i  {
  signed char v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7ll_BFu7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7c_BFs7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7ll_BFu7i, BFs7c_BFs7s_BFu7ll_BFu7i)
//============================================================================


struct  BFs7c_BFs7s_BFu7ll_BFu7ll  {
  signed char v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7ll_BFu7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFs7c_BFs7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7ll_BFu7ll, BFs7c_BFs7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFs7s_BFu7ll_BFu7s  {
  signed char v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7ll_BFu7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7c_BFs7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7ll_BFu7s, BFs7c_BFs7s_BFu7ll_BFu7s)
//============================================================================


struct  BFs7c_BFs7s_BFu7s  {
  signed char v1:7;
  signed short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7c_BFs7s_BFu7s) C1{ Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7s, BFs7c_BFs7s_BFu7s)
//============================================================================


struct  BFs7c_BFs7s_BFu7s_BFs7c  {
  signed char v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7s_BFs7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7s_BFs7c, BFs7c_BFs7s_BFu7s_BFs7c)
//============================================================================


struct  BFs7c_BFs7s_BFu7s_BFs7i  {
  signed char v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7s_BFs7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7s_BFs7i, BFs7c_BFs7s_BFu7s_BFs7i)
//============================================================================


struct  BFs7c_BFs7s_BFu7s_BFs7ll  {
  signed char v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7s_BFs7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7s_BFs7ll, BFs7c_BFs7s_BFu7s_BFs7ll)
//============================================================================


struct  BFs7c_BFs7s_BFu7s_BFs7s  {
  signed char v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7s_BFs7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7s_BFs7s, BFs7c_BFs7s_BFu7s_BFs7s)
//============================================================================


struct  BFs7c_BFs7s_BFu7s_BFu7c  {
  signed char v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7s_BFu7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7c_BFs7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7s_BFu7c, BFs7c_BFs7s_BFu7s_BFu7c)
//============================================================================


struct  BFs7c_BFs7s_BFu7s_BFu7i  {
  signed char v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7s_BFu7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7c_BFs7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFs7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7s_BFu7i, BFs7c_BFs7s_BFu7s_BFu7i)
//============================================================================


struct  BFs7c_BFs7s_BFu7s_BFu7ll  {
  signed char v1:7;
  signed short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7s_BFu7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7c_BFs7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFs7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFs7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7s_BFu7ll, BFs7c_BFs7s_BFu7s_BFu7ll)
//============================================================================


struct  BFs7c_BFs7s_BFu7s_BFu7s  {
  signed char v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFs7s_BFu7s_BFu7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7c_BFs7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFs7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFs7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFs7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFs7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFs7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFs7s_BFu7s_BFu7s, BFs7c_BFs7s_BFu7s_BFu7s)
//============================================================================


struct  BFs7c_BFu7c  {
  signed char v1:7;
  unsigned char v2:7;
};
//SIG(1 BFs7c_BFu7c) C1{ Fc:7 Fc:7}



static void Test_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFs7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c, BFs7c_BFu7c)
//============================================================================


struct  BFs7c_BFu7c_BFs7c  {
  signed char v1:7;
  unsigned char v2:7;
  signed char v3:7;
};
//SIG(1 BFs7c_BFu7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 3, "sizeof(BFs7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7c, BFs7c_BFu7c_BFs7c)
//============================================================================


struct  BFs7c_BFu7c_BFs7c_BFs7c  {
  signed char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFu7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7c_BFs7c, BFs7c_BFu7c_BFs7c_BFs7c)
//============================================================================


struct  BFs7c_BFu7c_BFs7c_BFs7i  {
  signed char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7c_BFs7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7c_BFs7i, BFs7c_BFu7c_BFs7c_BFs7i)
//============================================================================


struct  BFs7c_BFu7c_BFs7c_BFs7ll  {
  signed char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7c_BFs7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7c_BFs7ll, BFs7c_BFu7c_BFs7c_BFs7ll)
//============================================================================


struct  BFs7c_BFu7c_BFs7c_BFs7s  {
  signed char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7c_BFs7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7c_BFs7s, BFs7c_BFu7c_BFs7c_BFs7s)
//============================================================================


struct  BFs7c_BFu7c_BFs7c_BFu7c  {
  signed char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFu7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7c_BFu7c, BFs7c_BFu7c_BFs7c_BFu7c)
//============================================================================


struct  BFs7c_BFu7c_BFs7c_BFu7i  {
  signed char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7c_BFu7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7c_BFu7i, BFs7c_BFu7c_BFs7c_BFu7i)
//============================================================================


struct  BFs7c_BFu7c_BFs7c_BFu7ll  {
  signed char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7c_BFu7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7c_BFu7ll, BFs7c_BFu7c_BFs7c_BFu7ll)
//============================================================================


struct  BFs7c_BFu7c_BFs7c_BFu7s  {
  signed char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7c_BFu7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7c_BFu7s, BFs7c_BFu7c_BFs7c_BFu7s)
//============================================================================


struct  BFs7c_BFu7c_BFs7i  {
  signed char v1:7;
  unsigned char v2:7;
  signed int v3:7;
};
//SIG(1 BFs7c_BFu7c_BFs7i) C1{ Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7i, BFs7c_BFu7c_BFs7i)
//============================================================================


struct  BFs7c_BFu7c_BFs7i_BFs7c  {
  signed char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7i_BFs7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7i_BFs7c, BFs7c_BFu7c_BFs7i_BFs7c)
//============================================================================


struct  BFs7c_BFu7c_BFs7i_BFs7i  {
  signed char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7i_BFs7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7i_BFs7i, BFs7c_BFu7c_BFs7i_BFs7i)
//============================================================================


struct  BFs7c_BFu7c_BFs7i_BFs7ll  {
  signed char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7i_BFs7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7i_BFs7ll, BFs7c_BFu7c_BFs7i_BFs7ll)
//============================================================================


struct  BFs7c_BFu7c_BFs7i_BFs7s  {
  signed char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7i_BFs7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7i_BFs7s, BFs7c_BFu7c_BFs7i_BFs7s)
//============================================================================


struct  BFs7c_BFu7c_BFs7i_BFu7c  {
  signed char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7i_BFu7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7i_BFu7c, BFs7c_BFu7c_BFs7i_BFu7c)
//============================================================================


struct  BFs7c_BFu7c_BFs7i_BFu7i  {
  signed char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7i_BFu7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7i_BFu7i, BFs7c_BFu7c_BFs7i_BFu7i)
//============================================================================


struct  BFs7c_BFu7c_BFs7i_BFu7ll  {
  signed char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7i_BFu7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7i_BFu7ll, BFs7c_BFu7c_BFs7i_BFu7ll)
//============================================================================


struct  BFs7c_BFu7c_BFs7i_BFu7s  {
  signed char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7i_BFu7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7i_BFu7s, BFs7c_BFu7c_BFs7i_BFu7s)
//============================================================================


struct  BFs7c_BFu7c_BFs7ll  {
  signed char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7c_BFu7c_BFs7ll) C1{ Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7ll, BFs7c_BFu7c_BFs7ll)
//============================================================================


struct  BFs7c_BFu7c_BFs7ll_BFs7c  {
  signed char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7ll_BFs7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7ll_BFs7c, BFs7c_BFu7c_BFs7ll_BFs7c)
//============================================================================


struct  BFs7c_BFu7c_BFs7ll_BFs7i  {
  signed char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7ll_BFs7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7ll_BFs7i, BFs7c_BFu7c_BFs7ll_BFs7i)
//============================================================================


struct  BFs7c_BFu7c_BFs7ll_BFs7ll  {
  signed char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7ll_BFs7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFu7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7ll_BFs7ll, BFs7c_BFu7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFu7c_BFs7ll_BFs7s  {
  signed char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7ll_BFs7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7ll_BFs7s, BFs7c_BFu7c_BFs7ll_BFs7s)
//============================================================================


struct  BFs7c_BFu7c_BFs7ll_BFu7c  {
  signed char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7ll_BFu7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7ll_BFu7c, BFs7c_BFu7c_BFs7ll_BFu7c)
//============================================================================


struct  BFs7c_BFu7c_BFs7ll_BFu7i  {
  signed char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7ll_BFu7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7ll_BFu7i, BFs7c_BFu7c_BFs7ll_BFu7i)
//============================================================================


struct  BFs7c_BFu7c_BFs7ll_BFu7ll  {
  signed char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7ll_BFu7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFu7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7ll_BFu7ll, BFs7c_BFu7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFu7c_BFs7ll_BFu7s  {
  signed char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7ll_BFu7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7ll_BFu7s, BFs7c_BFu7c_BFs7ll_BFu7s)
//============================================================================


struct  BFs7c_BFu7c_BFs7s  {
  signed char v1:7;
  unsigned char v2:7;
  signed short v3:7;
};
//SIG(1 BFs7c_BFu7c_BFs7s) C1{ Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7s, BFs7c_BFu7c_BFs7s)
//============================================================================


struct  BFs7c_BFu7c_BFs7s_BFs7c  {
  signed char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7s_BFs7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7s_BFs7c, BFs7c_BFu7c_BFs7s_BFs7c)
//============================================================================


struct  BFs7c_BFu7c_BFs7s_BFs7i  {
  signed char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7s_BFs7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7s_BFs7i, BFs7c_BFu7c_BFs7s_BFs7i)
//============================================================================


struct  BFs7c_BFu7c_BFs7s_BFs7ll  {
  signed char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7s_BFs7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7s_BFs7ll, BFs7c_BFu7c_BFs7s_BFs7ll)
//============================================================================


struct  BFs7c_BFu7c_BFs7s_BFs7s  {
  signed char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7s_BFs7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7s_BFs7s, BFs7c_BFu7c_BFs7s_BFs7s)
//============================================================================


struct  BFs7c_BFu7c_BFs7s_BFu7c  {
  signed char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7s_BFu7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7s_BFu7c, BFs7c_BFu7c_BFs7s_BFu7c)
//============================================================================


struct  BFs7c_BFu7c_BFs7s_BFu7i  {
  signed char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7s_BFu7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7s_BFu7i, BFs7c_BFu7c_BFs7s_BFu7i)
//============================================================================


struct  BFs7c_BFu7c_BFs7s_BFu7ll  {
  signed char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7s_BFu7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7s_BFu7ll, BFs7c_BFu7c_BFs7s_BFu7ll)
//============================================================================


struct  BFs7c_BFu7c_BFs7s_BFu7s  {
  signed char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFs7s_BFu7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFs7s_BFu7s, BFs7c_BFu7c_BFs7s_BFu7s)
//============================================================================


struct  BFs7c_BFu7c_BFu7c  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7c_BFu7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(BFs7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7c, BFs7c_BFu7c_BFu7c)
//============================================================================


struct  BFs7c_BFu7c_BFu7c_BFs7c  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFu7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7c_BFs7c, BFs7c_BFu7c_BFu7c_BFs7c)
//============================================================================


struct  BFs7c_BFu7c_BFu7c_BFs7i  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7c_BFs7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7c_BFs7i, BFs7c_BFu7c_BFu7c_BFs7i)
//============================================================================


struct  BFs7c_BFu7c_BFu7c_BFs7ll  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7c_BFs7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7c_BFs7ll, BFs7c_BFu7c_BFu7c_BFs7ll)
//============================================================================


struct  BFs7c_BFu7c_BFu7c_BFs7s  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7c_BFs7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7c_BFs7s, BFs7c_BFu7c_BFu7c_BFs7s)
//============================================================================


struct  BFs7c_BFu7c_BFu7c_BFu7c  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFs7c_BFu7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7c_BFu7c, BFs7c_BFu7c_BFu7c_BFu7c)
//============================================================================


struct  BFs7c_BFu7c_BFu7c_BFu7i  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7c_BFu7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7c_BFu7i, BFs7c_BFu7c_BFu7c_BFu7i)
//============================================================================


struct  BFs7c_BFu7c_BFu7c_BFu7ll  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7c_BFu7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7c_BFu7ll, BFs7c_BFu7c_BFu7c_BFu7ll)
//============================================================================


struct  BFs7c_BFu7c_BFu7c_BFu7s  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7c_BFu7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7c_BFu7s, BFs7c_BFu7c_BFu7c_BFu7s)
//============================================================================


struct  BFs7c_BFu7c_BFu7i  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7c_BFu7c_BFu7i) C1{ Fc:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7i, BFs7c_BFu7c_BFu7i)
//============================================================================


struct  BFs7c_BFu7c_BFu7i_BFs7c  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7i_BFs7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7i_BFs7c, BFs7c_BFu7c_BFu7i_BFs7c)
//============================================================================


struct  BFs7c_BFu7c_BFu7i_BFs7i  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7i_BFs7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7i_BFs7i, BFs7c_BFu7c_BFu7i_BFs7i)
//============================================================================


struct  BFs7c_BFu7c_BFu7i_BFs7ll  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7i_BFs7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7i_BFs7ll, BFs7c_BFu7c_BFu7i_BFs7ll)
//============================================================================


struct  BFs7c_BFu7c_BFu7i_BFs7s  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7i_BFs7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7i_BFs7s, BFs7c_BFu7c_BFu7i_BFs7s)
//============================================================================


struct  BFs7c_BFu7c_BFu7i_BFu7c  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7i_BFu7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7i_BFu7c, BFs7c_BFu7c_BFu7i_BFu7c)
//============================================================================


struct  BFs7c_BFu7c_BFu7i_BFu7i  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7i_BFu7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7i_BFu7i, BFs7c_BFu7c_BFu7i_BFu7i)
//============================================================================


struct  BFs7c_BFu7c_BFu7i_BFu7ll  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7i_BFu7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7i_BFu7ll, BFs7c_BFu7c_BFu7i_BFu7ll)
//============================================================================


struct  BFs7c_BFu7c_BFu7i_BFu7s  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7i_BFu7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7i_BFu7s, BFs7c_BFu7c_BFu7i_BFu7s)
//============================================================================


struct  BFs7c_BFu7c_BFu7ll  {
  signed char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7c_BFu7c_BFu7ll) C1{ Fc:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7ll, BFs7c_BFu7c_BFu7ll)
//============================================================================


struct  BFs7c_BFu7c_BFu7ll_BFs7c  {
  signed char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7ll_BFs7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7ll_BFs7c, BFs7c_BFu7c_BFu7ll_BFs7c)
//============================================================================


struct  BFs7c_BFu7c_BFu7ll_BFs7i  {
  signed char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7ll_BFs7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7ll_BFs7i, BFs7c_BFu7c_BFu7ll_BFs7i)
//============================================================================


struct  BFs7c_BFu7c_BFu7ll_BFs7ll  {
  signed char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7ll_BFs7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFu7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7ll_BFs7ll, BFs7c_BFu7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFu7c_BFu7ll_BFs7s  {
  signed char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7ll_BFs7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7ll_BFs7s, BFs7c_BFu7c_BFu7ll_BFs7s)
//============================================================================


struct  BFs7c_BFu7c_BFu7ll_BFu7c  {
  signed char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7ll_BFu7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7ll_BFu7c, BFs7c_BFu7c_BFu7ll_BFu7c)
//============================================================================


struct  BFs7c_BFu7c_BFu7ll_BFu7i  {
  signed char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7ll_BFu7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7ll_BFu7i, BFs7c_BFu7c_BFu7ll_BFu7i)
//============================================================================


struct  BFs7c_BFu7c_BFu7ll_BFu7ll  {
  signed char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7ll_BFu7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFu7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7ll_BFu7ll, BFs7c_BFu7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFu7c_BFu7ll_BFu7s  {
  signed char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7ll_BFu7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7ll_BFu7s, BFs7c_BFu7c_BFu7ll_BFu7s)
//============================================================================


struct  BFs7c_BFu7c_BFu7s  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7c_BFu7c_BFu7s) C1{ Fc:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7s, BFs7c_BFu7c_BFu7s)
//============================================================================


struct  BFs7c_BFu7c_BFu7s_BFs7c  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7s_BFs7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7s_BFs7c, BFs7c_BFu7c_BFu7s_BFs7c)
//============================================================================


struct  BFs7c_BFu7c_BFu7s_BFs7i  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7s_BFs7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7s_BFs7i, BFs7c_BFu7c_BFu7s_BFs7i)
//============================================================================


struct  BFs7c_BFu7c_BFu7s_BFs7ll  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7s_BFs7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7s_BFs7ll, BFs7c_BFu7c_BFu7s_BFs7ll)
//============================================================================


struct  BFs7c_BFu7c_BFu7s_BFs7s  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7s_BFs7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7s_BFs7s, BFs7c_BFu7c_BFu7s_BFs7s)
//============================================================================


struct  BFs7c_BFu7c_BFu7s_BFu7c  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7s_BFu7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7s_BFu7c, BFs7c_BFu7c_BFu7s_BFu7c)
//============================================================================


struct  BFs7c_BFu7c_BFu7s_BFu7i  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7s_BFu7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7s_BFu7i, BFs7c_BFu7c_BFu7s_BFu7i)
//============================================================================


struct  BFs7c_BFu7c_BFu7s_BFu7ll  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7s_BFu7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7s_BFu7ll, BFs7c_BFu7c_BFu7s_BFu7ll)
//============================================================================


struct  BFs7c_BFu7c_BFu7s_BFu7s  {
  signed char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7c_BFu7s_BFu7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7c_BFu7s_BFu7s, BFs7c_BFu7c_BFu7s_BFu7s)
//============================================================================


struct  BFs7c_BFu7i  {
  signed char v1:7;
  unsigned int v2:7;
};
//SIG(1 BFs7c_BFu7i) C1{ Fc:7 Fi:7}



static void Test_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i, BFs7c_BFu7i)
//============================================================================


struct  BFs7c_BFu7i_BFs7c  {
  signed char v1:7;
  unsigned int v2:7;
  signed char v3:7;
};
//SIG(1 BFs7c_BFu7i_BFs7c) C1{ Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7c, BFs7c_BFu7i_BFs7c)
//============================================================================


struct  BFs7c_BFu7i_BFs7c_BFs7c  {
  signed char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7c_BFs7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7c_BFs7c, BFs7c_BFu7i_BFs7c_BFs7c)
//============================================================================


struct  BFs7c_BFu7i_BFs7c_BFs7i  {
  signed char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7c_BFs7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7c_BFs7i, BFs7c_BFu7i_BFs7c_BFs7i)
//============================================================================


struct  BFs7c_BFu7i_BFs7c_BFs7ll  {
  signed char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7c_BFs7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7c_BFs7ll, BFs7c_BFu7i_BFs7c_BFs7ll)
//============================================================================


struct  BFs7c_BFu7i_BFs7c_BFs7s  {
  signed char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7c_BFs7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7c_BFs7s, BFs7c_BFu7i_BFs7c_BFs7s)
//============================================================================


struct  BFs7c_BFu7i_BFs7c_BFu7c  {
  signed char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7c_BFu7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7c_BFu7c, BFs7c_BFu7i_BFs7c_BFu7c)
//============================================================================


struct  BFs7c_BFu7i_BFs7c_BFu7i  {
  signed char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7c_BFu7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7c_BFu7i, BFs7c_BFu7i_BFs7c_BFu7i)
//============================================================================


struct  BFs7c_BFu7i_BFs7c_BFu7ll  {
  signed char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7c_BFu7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7c_BFu7ll, BFs7c_BFu7i_BFs7c_BFu7ll)
//============================================================================


struct  BFs7c_BFu7i_BFs7c_BFu7s  {
  signed char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7c_BFu7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7c_BFu7s, BFs7c_BFu7i_BFs7c_BFu7s)
//============================================================================


struct  BFs7c_BFu7i_BFs7i  {
  signed char v1:7;
  unsigned int v2:7;
  signed int v3:7;
};
//SIG(1 BFs7c_BFu7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7i, BFs7c_BFu7i_BFs7i)
//============================================================================


struct  BFs7c_BFu7i_BFs7i_BFs7c  {
  signed char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7i_BFs7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7i_BFs7c, BFs7c_BFu7i_BFs7i_BFs7c)
//============================================================================


struct  BFs7c_BFu7i_BFs7i_BFs7i  {
  signed char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7i_BFs7i, BFs7c_BFu7i_BFs7i_BFs7i)
//============================================================================


struct  BFs7c_BFu7i_BFs7i_BFs7ll  {
  signed char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7i_BFs7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7i_BFs7ll, BFs7c_BFu7i_BFs7i_BFs7ll)
//============================================================================


struct  BFs7c_BFu7i_BFs7i_BFs7s  {
  signed char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7i_BFs7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7i_BFs7s, BFs7c_BFu7i_BFs7i_BFs7s)
//============================================================================


struct  BFs7c_BFu7i_BFs7i_BFu7c  {
  signed char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7i_BFu7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7i_BFu7c, BFs7c_BFu7i_BFs7i_BFu7c)
//============================================================================


struct  BFs7c_BFu7i_BFs7i_BFu7i  {
  signed char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7i_BFu7i, BFs7c_BFu7i_BFs7i_BFu7i)
//============================================================================


struct  BFs7c_BFu7i_BFs7i_BFu7ll  {
  signed char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7i_BFu7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7i_BFu7ll, BFs7c_BFu7i_BFs7i_BFu7ll)
//============================================================================


struct  BFs7c_BFu7i_BFs7i_BFu7s  {
  signed char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7i_BFu7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7i_BFu7s, BFs7c_BFu7i_BFs7i_BFu7s)
//============================================================================


struct  BFs7c_BFu7i_BFs7ll  {
  signed char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7c_BFu7i_BFs7ll) C1{ Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7ll, BFs7c_BFu7i_BFs7ll)
//============================================================================


struct  BFs7c_BFu7i_BFs7ll_BFs7c  {
  signed char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7ll_BFs7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7ll_BFs7c, BFs7c_BFu7i_BFs7ll_BFs7c)
//============================================================================


struct  BFs7c_BFu7i_BFs7ll_BFs7i  {
  signed char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7ll_BFs7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7ll_BFs7i, BFs7c_BFu7i_BFs7ll_BFs7i)
//============================================================================


struct  BFs7c_BFu7i_BFs7ll_BFs7ll  {
  signed char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7ll_BFs7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFs7c_BFu7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7ll_BFs7ll, BFs7c_BFu7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFu7i_BFs7ll_BFs7s  {
  signed char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7ll_BFs7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7ll_BFs7s, BFs7c_BFu7i_BFs7ll_BFs7s)
//============================================================================


struct  BFs7c_BFu7i_BFs7ll_BFu7c  {
  signed char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7ll_BFu7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7ll_BFu7c, BFs7c_BFu7i_BFs7ll_BFu7c)
//============================================================================


struct  BFs7c_BFu7i_BFs7ll_BFu7i  {
  signed char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7ll_BFu7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7ll_BFu7i, BFs7c_BFu7i_BFs7ll_BFu7i)
//============================================================================


struct  BFs7c_BFu7i_BFs7ll_BFu7ll  {
  signed char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7ll_BFu7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFs7c_BFu7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7ll_BFu7ll, BFs7c_BFu7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFu7i_BFs7ll_BFu7s  {
  signed char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7ll_BFu7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7ll_BFu7s, BFs7c_BFu7i_BFs7ll_BFu7s)
//============================================================================


struct  BFs7c_BFu7i_BFs7s  {
  signed char v1:7;
  unsigned int v2:7;
  signed short v3:7;
};
//SIG(1 BFs7c_BFu7i_BFs7s) C1{ Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7s, BFs7c_BFu7i_BFs7s)
//============================================================================


struct  BFs7c_BFu7i_BFs7s_BFs7c  {
  signed char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7s_BFs7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7s_BFs7c, BFs7c_BFu7i_BFs7s_BFs7c)
//============================================================================


struct  BFs7c_BFu7i_BFs7s_BFs7i  {
  signed char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7s_BFs7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7s_BFs7i, BFs7c_BFu7i_BFs7s_BFs7i)
//============================================================================


struct  BFs7c_BFu7i_BFs7s_BFs7ll  {
  signed char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7s_BFs7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7s_BFs7ll, BFs7c_BFu7i_BFs7s_BFs7ll)
//============================================================================


struct  BFs7c_BFu7i_BFs7s_BFs7s  {
  signed char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7s_BFs7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7s_BFs7s, BFs7c_BFu7i_BFs7s_BFs7s)
//============================================================================


struct  BFs7c_BFu7i_BFs7s_BFu7c  {
  signed char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7s_BFu7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7s_BFu7c, BFs7c_BFu7i_BFs7s_BFu7c)
//============================================================================


struct  BFs7c_BFu7i_BFs7s_BFu7i  {
  signed char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7s_BFu7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7s_BFu7i, BFs7c_BFu7i_BFs7s_BFu7i)
//============================================================================


struct  BFs7c_BFu7i_BFs7s_BFu7ll  {
  signed char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7s_BFu7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7s_BFu7ll, BFs7c_BFu7i_BFs7s_BFu7ll)
//============================================================================


struct  BFs7c_BFu7i_BFs7s_BFu7s  {
  signed char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFs7s_BFu7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFs7s_BFu7s, BFs7c_BFu7i_BFs7s_BFu7s)
//============================================================================


struct  BFs7c_BFu7i_BFu7c  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7c_BFu7i_BFu7c) C1{ Fc:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7c, BFs7c_BFu7i_BFu7c)
//============================================================================


struct  BFs7c_BFu7i_BFu7c_BFs7c  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7c_BFs7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7c_BFs7c, BFs7c_BFu7i_BFu7c_BFs7c)
//============================================================================


struct  BFs7c_BFu7i_BFu7c_BFs7i  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7c_BFs7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7c_BFs7i, BFs7c_BFu7i_BFu7c_BFs7i)
//============================================================================


struct  BFs7c_BFu7i_BFu7c_BFs7ll  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7c_BFs7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7c_BFs7ll, BFs7c_BFu7i_BFu7c_BFs7ll)
//============================================================================


struct  BFs7c_BFu7i_BFu7c_BFs7s  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7c_BFs7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7c_BFs7s, BFs7c_BFu7i_BFu7c_BFs7s)
//============================================================================


struct  BFs7c_BFu7i_BFu7c_BFu7c  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7c_BFu7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7c_BFu7c, BFs7c_BFu7i_BFu7c_BFu7c)
//============================================================================


struct  BFs7c_BFu7i_BFu7c_BFu7i  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7c_BFu7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7c_BFu7i, BFs7c_BFu7i_BFu7c_BFu7i)
//============================================================================


struct  BFs7c_BFu7i_BFu7c_BFu7ll  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7c_BFu7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7c_BFu7ll, BFs7c_BFu7i_BFu7c_BFu7ll)
//============================================================================


struct  BFs7c_BFu7i_BFu7c_BFu7s  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7c_BFu7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7c_BFu7s, BFs7c_BFu7i_BFu7c_BFu7s)
//============================================================================


struct  BFs7c_BFu7i_BFu7i  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7c_BFu7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7i, BFs7c_BFu7i_BFu7i)
//============================================================================


struct  BFs7c_BFu7i_BFu7i_BFs7c  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7i_BFs7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7i_BFs7c, BFs7c_BFu7i_BFu7i_BFs7c)
//============================================================================


struct  BFs7c_BFu7i_BFu7i_BFs7i  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7i_BFs7i, BFs7c_BFu7i_BFu7i_BFs7i)
//============================================================================


struct  BFs7c_BFu7i_BFu7i_BFs7ll  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7i_BFs7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7i_BFs7ll, BFs7c_BFu7i_BFu7i_BFs7ll)
//============================================================================


struct  BFs7c_BFu7i_BFu7i_BFs7s  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7i_BFs7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7i_BFs7s, BFs7c_BFu7i_BFu7i_BFs7s)
//============================================================================


struct  BFs7c_BFu7i_BFu7i_BFu7c  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7i_BFu7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7i_BFu7c, BFs7c_BFu7i_BFu7i_BFu7c)
//============================================================================


struct  BFs7c_BFu7i_BFu7i_BFu7i  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7i_BFu7i, BFs7c_BFu7i_BFu7i_BFu7i)
//============================================================================


struct  BFs7c_BFu7i_BFu7i_BFu7ll  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7i_BFu7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7i_BFu7ll, BFs7c_BFu7i_BFu7i_BFu7ll)
//============================================================================


struct  BFs7c_BFu7i_BFu7i_BFu7s  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7i_BFu7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7i_BFu7s, BFs7c_BFu7i_BFu7i_BFu7s)
//============================================================================


struct  BFs7c_BFu7i_BFu7ll  {
  signed char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7c_BFu7i_BFu7ll) C1{ Fc:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7ll, BFs7c_BFu7i_BFu7ll)
//============================================================================


struct  BFs7c_BFu7i_BFu7ll_BFs7c  {
  signed char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7ll_BFs7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7ll_BFs7c, BFs7c_BFu7i_BFu7ll_BFs7c)
//============================================================================


struct  BFs7c_BFu7i_BFu7ll_BFs7i  {
  signed char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7ll_BFs7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7ll_BFs7i, BFs7c_BFu7i_BFu7ll_BFs7i)
//============================================================================


struct  BFs7c_BFu7i_BFu7ll_BFs7ll  {
  signed char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7ll_BFs7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFs7c_BFu7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7ll_BFs7ll, BFs7c_BFu7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFu7i_BFu7ll_BFs7s  {
  signed char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7ll_BFs7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7ll_BFs7s, BFs7c_BFu7i_BFu7ll_BFs7s)
//============================================================================


struct  BFs7c_BFu7i_BFu7ll_BFu7c  {
  signed char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7ll_BFu7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7ll_BFu7c, BFs7c_BFu7i_BFu7ll_BFu7c)
//============================================================================


struct  BFs7c_BFu7i_BFu7ll_BFu7i  {
  signed char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7ll_BFu7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7ll_BFu7i, BFs7c_BFu7i_BFu7ll_BFu7i)
//============================================================================


struct  BFs7c_BFu7i_BFu7ll_BFu7ll  {
  signed char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7ll_BFu7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFs7c_BFu7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7ll_BFu7ll, BFs7c_BFu7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFu7i_BFu7ll_BFu7s  {
  signed char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7ll_BFu7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7ll_BFu7s, BFs7c_BFu7i_BFu7ll_BFu7s)
//============================================================================


struct  BFs7c_BFu7i_BFu7s  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7c_BFu7i_BFu7s) C1{ Fc:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7s, BFs7c_BFu7i_BFu7s)
//============================================================================


struct  BFs7c_BFu7i_BFu7s_BFs7c  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7s_BFs7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7s_BFs7c, BFs7c_BFu7i_BFu7s_BFs7c)
//============================================================================


struct  BFs7c_BFu7i_BFu7s_BFs7i  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7s_BFs7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7s_BFs7i, BFs7c_BFu7i_BFu7s_BFs7i)
//============================================================================


struct  BFs7c_BFu7i_BFu7s_BFs7ll  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7s_BFs7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7s_BFs7ll, BFs7c_BFu7i_BFu7s_BFs7ll)
//============================================================================


struct  BFs7c_BFu7i_BFu7s_BFs7s  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7s_BFs7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7s_BFs7s, BFs7c_BFu7i_BFu7s_BFs7s)
//============================================================================


struct  BFs7c_BFu7i_BFu7s_BFu7c  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7s_BFu7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7s_BFu7c, BFs7c_BFu7i_BFu7s_BFu7c)
//============================================================================


struct  BFs7c_BFu7i_BFu7s_BFu7i  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7s_BFu7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7s_BFu7i, BFs7c_BFu7i_BFu7s_BFu7i)
//============================================================================


struct  BFs7c_BFu7i_BFu7s_BFu7ll  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7s_BFu7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7s_BFu7ll, BFs7c_BFu7i_BFu7s_BFu7ll)
//============================================================================


struct  BFs7c_BFu7i_BFu7s_BFu7s  {
  signed char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7i_BFu7s_BFu7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7i_BFu7s_BFu7s, BFs7c_BFu7i_BFu7s_BFu7s)
//============================================================================


struct  BFs7c_BFu7ll  {
  signed char v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFs7c_BFu7ll) C1{ Fc:7 FL:7}



static void Test_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll, BFs7c_BFu7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFs7c  {
  signed char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7c) C1{ Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7c, BFs7c_BFu7ll_BFs7c)
//============================================================================


struct  BFs7c_BFu7ll_BFs7c_BFs7c  {
  signed char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7c_BFs7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7c_BFs7c, BFs7c_BFu7ll_BFs7c_BFs7c)
//============================================================================


struct  BFs7c_BFu7ll_BFs7c_BFs7i  {
  signed char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7c_BFs7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7c_BFs7i, BFs7c_BFu7ll_BFs7c_BFs7i)
//============================================================================


struct  BFs7c_BFu7ll_BFs7c_BFs7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7c_BFs7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7c_BFs7ll, BFs7c_BFu7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFs7c_BFs7s  {
  signed char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7c_BFs7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7c_BFs7s, BFs7c_BFu7ll_BFs7c_BFs7s)
//============================================================================


struct  BFs7c_BFu7ll_BFs7c_BFu7c  {
  signed char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7c_BFu7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7c_BFu7c, BFs7c_BFu7ll_BFs7c_BFu7c)
//============================================================================


struct  BFs7c_BFu7ll_BFs7c_BFu7i  {
  signed char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7c_BFu7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7c_BFu7i, BFs7c_BFu7ll_BFs7c_BFu7i)
//============================================================================


struct  BFs7c_BFu7ll_BFs7c_BFu7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7c_BFu7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7c_BFu7ll, BFs7c_BFu7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFs7c_BFu7s  {
  signed char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7c_BFu7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7c_BFu7s, BFs7c_BFu7ll_BFs7c_BFu7s)
//============================================================================


struct  BFs7c_BFu7ll_BFs7i  {
  signed char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7i) C1{ Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7i, BFs7c_BFu7ll_BFs7i)
//============================================================================


struct  BFs7c_BFu7ll_BFs7i_BFs7c  {
  signed char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7i_BFs7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7i_BFs7c, BFs7c_BFu7ll_BFs7i_BFs7c)
//============================================================================


struct  BFs7c_BFu7ll_BFs7i_BFs7i  {
  signed char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7i_BFs7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7i_BFs7i, BFs7c_BFu7ll_BFs7i_BFs7i)
//============================================================================


struct  BFs7c_BFu7ll_BFs7i_BFs7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7i_BFs7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7i_BFs7ll, BFs7c_BFu7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFs7i_BFs7s  {
  signed char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7i_BFs7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7i_BFs7s, BFs7c_BFu7ll_BFs7i_BFs7s)
//============================================================================


struct  BFs7c_BFu7ll_BFs7i_BFu7c  {
  signed char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7i_BFu7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7i_BFu7c, BFs7c_BFu7ll_BFs7i_BFu7c)
//============================================================================


struct  BFs7c_BFu7ll_BFs7i_BFu7i  {
  signed char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7i_BFu7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7i_BFu7i, BFs7c_BFu7ll_BFs7i_BFu7i)
//============================================================================


struct  BFs7c_BFu7ll_BFs7i_BFu7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7i_BFu7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7i_BFu7ll, BFs7c_BFu7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFs7i_BFu7s  {
  signed char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7i_BFu7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7i_BFu7s, BFs7c_BFu7ll_BFs7i_BFu7s)
//============================================================================


struct  BFs7c_BFu7ll_BFs7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7ll, BFs7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFs7ll_BFs7c  {
  signed char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7ll_BFs7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7ll_BFs7c, BFs7c_BFu7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFs7c_BFu7ll_BFs7ll_BFs7i  {
  signed char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7ll_BFs7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7ll_BFs7i, BFs7c_BFu7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFs7c_BFu7ll_BFs7ll_BFs7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFs7c_BFu7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7ll_BFs7ll, BFs7c_BFu7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFs7ll_BFs7s  {
  signed char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7ll_BFs7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7ll_BFs7s, BFs7c_BFu7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFs7c_BFu7ll_BFs7ll_BFu7c  {
  signed char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7ll_BFu7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7ll_BFu7c, BFs7c_BFu7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFs7c_BFu7ll_BFs7ll_BFu7i  {
  signed char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7ll_BFu7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7ll_BFu7i, BFs7c_BFu7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFs7c_BFu7ll_BFs7ll_BFu7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFs7c_BFu7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7ll_BFu7ll, BFs7c_BFu7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFs7ll_BFu7s  {
  signed char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7ll_BFu7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7ll_BFu7s, BFs7c_BFu7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFs7c_BFu7ll_BFs7s  {
  signed char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7s) C1{ Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7s, BFs7c_BFu7ll_BFs7s)
//============================================================================


struct  BFs7c_BFu7ll_BFs7s_BFs7c  {
  signed char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7s_BFs7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7s_BFs7c, BFs7c_BFu7ll_BFs7s_BFs7c)
//============================================================================


struct  BFs7c_BFu7ll_BFs7s_BFs7i  {
  signed char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7s_BFs7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7s_BFs7i, BFs7c_BFu7ll_BFs7s_BFs7i)
//============================================================================


struct  BFs7c_BFu7ll_BFs7s_BFs7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7s_BFs7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7s_BFs7ll, BFs7c_BFu7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFs7s_BFs7s  {
  signed char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7s_BFs7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7s_BFs7s, BFs7c_BFu7ll_BFs7s_BFs7s)
//============================================================================


struct  BFs7c_BFu7ll_BFs7s_BFu7c  {
  signed char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7s_BFu7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7s_BFu7c, BFs7c_BFu7ll_BFs7s_BFu7c)
//============================================================================


struct  BFs7c_BFu7ll_BFs7s_BFu7i  {
  signed char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7s_BFu7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7s_BFu7i, BFs7c_BFu7ll_BFs7s_BFu7i)
//============================================================================


struct  BFs7c_BFu7ll_BFs7s_BFu7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7s_BFu7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7s_BFu7ll, BFs7c_BFu7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFs7s_BFu7s  {
  signed char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFs7s_BFu7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFs7s_BFu7s, BFs7c_BFu7ll_BFs7s_BFu7s)
//============================================================================


struct  BFs7c_BFu7ll_BFu7c  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7c) C1{ Fc:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7c, BFs7c_BFu7ll_BFu7c)
//============================================================================


struct  BFs7c_BFu7ll_BFu7c_BFs7c  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7c_BFs7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7c_BFs7c, BFs7c_BFu7ll_BFu7c_BFs7c)
//============================================================================


struct  BFs7c_BFu7ll_BFu7c_BFs7i  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7c_BFs7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7c_BFs7i, BFs7c_BFu7ll_BFu7c_BFs7i)
//============================================================================


struct  BFs7c_BFu7ll_BFu7c_BFs7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7c_BFs7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7c_BFs7ll, BFs7c_BFu7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFu7c_BFs7s  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7c_BFs7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7c_BFs7s, BFs7c_BFu7ll_BFu7c_BFs7s)
//============================================================================


struct  BFs7c_BFu7ll_BFu7c_BFu7c  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7c_BFu7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7c_BFu7c, BFs7c_BFu7ll_BFu7c_BFu7c)
//============================================================================


struct  BFs7c_BFu7ll_BFu7c_BFu7i  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7c_BFu7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7c_BFu7i, BFs7c_BFu7ll_BFu7c_BFu7i)
//============================================================================


struct  BFs7c_BFu7ll_BFu7c_BFu7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7c_BFu7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7c_BFu7ll, BFs7c_BFu7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFu7c_BFu7s  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7c_BFu7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7c_BFu7s, BFs7c_BFu7ll_BFu7c_BFu7s)
//============================================================================


struct  BFs7c_BFu7ll_BFu7i  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7i) C1{ Fc:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7i, BFs7c_BFu7ll_BFu7i)
//============================================================================


struct  BFs7c_BFu7ll_BFu7i_BFs7c  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7i_BFs7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7i_BFs7c, BFs7c_BFu7ll_BFu7i_BFs7c)
//============================================================================


struct  BFs7c_BFu7ll_BFu7i_BFs7i  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7i_BFs7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7i_BFs7i, BFs7c_BFu7ll_BFu7i_BFs7i)
//============================================================================


struct  BFs7c_BFu7ll_BFu7i_BFs7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7i_BFs7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7i_BFs7ll, BFs7c_BFu7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFu7i_BFs7s  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7i_BFs7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7i_BFs7s, BFs7c_BFu7ll_BFu7i_BFs7s)
//============================================================================


struct  BFs7c_BFu7ll_BFu7i_BFu7c  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7i_BFu7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7i_BFu7c, BFs7c_BFu7ll_BFu7i_BFu7c)
//============================================================================


struct  BFs7c_BFu7ll_BFu7i_BFu7i  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7i_BFu7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7i_BFu7i, BFs7c_BFu7ll_BFu7i_BFu7i)
//============================================================================


struct  BFs7c_BFu7ll_BFu7i_BFu7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7i_BFu7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7i_BFu7ll, BFs7c_BFu7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFu7i_BFu7s  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7i_BFu7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7i_BFu7s, BFs7c_BFu7ll_BFu7i_BFu7s)
//============================================================================


struct  BFs7c_BFu7ll_BFu7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7}



static void Test_BFs7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7ll, BFs7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFu7ll_BFs7c  {
  signed char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7ll_BFs7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7ll_BFs7c, BFs7c_BFu7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFs7c_BFu7ll_BFu7ll_BFs7i  {
  signed char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7ll_BFs7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7ll_BFs7i, BFs7c_BFu7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFs7c_BFu7ll_BFu7ll_BFs7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFs7c_BFu7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7ll_BFs7ll, BFs7c_BFu7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFu7ll_BFs7s  {
  signed char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7ll_BFs7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7ll_BFs7s, BFs7c_BFu7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFs7c_BFu7ll_BFu7ll_BFu7c  {
  signed char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7ll_BFu7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7ll_BFu7c, BFs7c_BFu7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFs7c_BFu7ll_BFu7ll_BFu7i  {
  signed char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7ll_BFu7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7ll_BFu7i, BFs7c_BFu7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFs7c_BFu7ll_BFu7ll_BFu7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFs7c_BFu7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7ll_BFu7ll, BFs7c_BFu7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFu7ll_BFu7s  {
  signed char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7ll_BFu7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7ll_BFu7s, BFs7c_BFu7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFs7c_BFu7ll_BFu7s  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7s) C1{ Fc:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7s, BFs7c_BFu7ll_BFu7s)
//============================================================================


struct  BFs7c_BFu7ll_BFu7s_BFs7c  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7s_BFs7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7s_BFs7c, BFs7c_BFu7ll_BFu7s_BFs7c)
//============================================================================


struct  BFs7c_BFu7ll_BFu7s_BFs7i  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7s_BFs7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7s_BFs7i, BFs7c_BFu7ll_BFu7s_BFs7i)
//============================================================================


struct  BFs7c_BFu7ll_BFu7s_BFs7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7s_BFs7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7s_BFs7ll, BFs7c_BFu7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFu7s_BFs7s  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7s_BFs7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7s_BFs7s, BFs7c_BFu7ll_BFu7s_BFs7s)
//============================================================================


struct  BFs7c_BFu7ll_BFu7s_BFu7c  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7s_BFu7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7s_BFu7c, BFs7c_BFu7ll_BFu7s_BFu7c)
//============================================================================


struct  BFs7c_BFu7ll_BFu7s_BFu7i  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7s_BFu7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7s_BFu7i, BFs7c_BFu7ll_BFu7s_BFu7i)
//============================================================================


struct  BFs7c_BFu7ll_BFu7s_BFu7ll  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7s_BFu7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7s_BFu7ll, BFs7c_BFu7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFs7c_BFu7ll_BFu7s_BFu7s  {
  signed char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7ll_BFu7s_BFu7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7ll_BFu7s_BFu7s, BFs7c_BFu7ll_BFu7s_BFu7s)
//============================================================================


struct  BFs7c_BFu7s  {
  signed char v1:7;
  unsigned short v2:7;
};
//SIG(1 BFs7c_BFu7s) C1{ Fc:7 Fs:7}



static void Test_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s, BFs7c_BFu7s)
//============================================================================


struct  BFs7c_BFu7s_BFs7c  {
  signed char v1:7;
  unsigned short v2:7;
  signed char v3:7;
};
//SIG(1 BFs7c_BFu7s_BFs7c) C1{ Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7c, BFs7c_BFu7s_BFs7c)
//============================================================================


struct  BFs7c_BFu7s_BFs7c_BFs7c  {
  signed char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7c_BFs7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7c_BFs7c, BFs7c_BFu7s_BFs7c_BFs7c)
//============================================================================


struct  BFs7c_BFu7s_BFs7c_BFs7i  {
  signed char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7c_BFs7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7c_BFs7i, BFs7c_BFu7s_BFs7c_BFs7i)
//============================================================================


struct  BFs7c_BFu7s_BFs7c_BFs7ll  {
  signed char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7c_BFs7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7c_BFs7ll, BFs7c_BFu7s_BFs7c_BFs7ll)
//============================================================================


struct  BFs7c_BFu7s_BFs7c_BFs7s  {
  signed char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7c_BFs7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7c_BFs7s, BFs7c_BFu7s_BFs7c_BFs7s)
//============================================================================


struct  BFs7c_BFu7s_BFs7c_BFu7c  {
  signed char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7c_BFu7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7c_BFu7c, BFs7c_BFu7s_BFs7c_BFu7c)
//============================================================================


struct  BFs7c_BFu7s_BFs7c_BFu7i  {
  signed char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7c_BFu7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7c_BFu7i, BFs7c_BFu7s_BFs7c_BFu7i)
//============================================================================


struct  BFs7c_BFu7s_BFs7c_BFu7ll  {
  signed char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7c_BFu7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7c_BFu7ll, BFs7c_BFu7s_BFs7c_BFu7ll)
//============================================================================


struct  BFs7c_BFu7s_BFs7c_BFu7s  {
  signed char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7c_BFu7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7c_BFu7s, BFs7c_BFu7s_BFs7c_BFu7s)
//============================================================================


struct  BFs7c_BFu7s_BFs7i  {
  signed char v1:7;
  unsigned short v2:7;
  signed int v3:7;
};
//SIG(1 BFs7c_BFu7s_BFs7i) C1{ Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7i, BFs7c_BFu7s_BFs7i)
//============================================================================


struct  BFs7c_BFu7s_BFs7i_BFs7c  {
  signed char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7i_BFs7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7i_BFs7c, BFs7c_BFu7s_BFs7i_BFs7c)
//============================================================================


struct  BFs7c_BFu7s_BFs7i_BFs7i  {
  signed char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7i_BFs7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7i_BFs7i, BFs7c_BFu7s_BFs7i_BFs7i)
//============================================================================


struct  BFs7c_BFu7s_BFs7i_BFs7ll  {
  signed char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7i_BFs7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7i_BFs7ll, BFs7c_BFu7s_BFs7i_BFs7ll)
//============================================================================


struct  BFs7c_BFu7s_BFs7i_BFs7s  {
  signed char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7i_BFs7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7i_BFs7s, BFs7c_BFu7s_BFs7i_BFs7s)
//============================================================================


struct  BFs7c_BFu7s_BFs7i_BFu7c  {
  signed char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7i_BFu7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7i_BFu7c, BFs7c_BFu7s_BFs7i_BFu7c)
//============================================================================


struct  BFs7c_BFu7s_BFs7i_BFu7i  {
  signed char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7i_BFu7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7i_BFu7i, BFs7c_BFu7s_BFs7i_BFu7i)
//============================================================================


struct  BFs7c_BFu7s_BFs7i_BFu7ll  {
  signed char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7i_BFu7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7i_BFu7ll, BFs7c_BFu7s_BFs7i_BFu7ll)
//============================================================================


struct  BFs7c_BFu7s_BFs7i_BFu7s  {
  signed char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7i_BFu7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7i_BFu7s, BFs7c_BFu7s_BFs7i_BFu7s)
//============================================================================


struct  BFs7c_BFu7s_BFs7ll  {
  signed char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7c_BFu7s_BFs7ll) C1{ Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7ll, BFs7c_BFu7s_BFs7ll)
//============================================================================


struct  BFs7c_BFu7s_BFs7ll_BFs7c  {
  signed char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7ll_BFs7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7ll_BFs7c, BFs7c_BFu7s_BFs7ll_BFs7c)
//============================================================================


struct  BFs7c_BFu7s_BFs7ll_BFs7i  {
  signed char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7ll_BFs7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7ll_BFs7i, BFs7c_BFu7s_BFs7ll_BFs7i)
//============================================================================


struct  BFs7c_BFu7s_BFs7ll_BFs7ll  {
  signed char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7ll_BFs7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFs7c_BFu7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7ll_BFs7ll, BFs7c_BFu7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFu7s_BFs7ll_BFs7s  {
  signed char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7ll_BFs7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7ll_BFs7s, BFs7c_BFu7s_BFs7ll_BFs7s)
//============================================================================


struct  BFs7c_BFu7s_BFs7ll_BFu7c  {
  signed char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7ll_BFu7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7ll_BFu7c, BFs7c_BFu7s_BFs7ll_BFu7c)
//============================================================================


struct  BFs7c_BFu7s_BFs7ll_BFu7i  {
  signed char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7ll_BFu7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7ll_BFu7i, BFs7c_BFu7s_BFs7ll_BFu7i)
//============================================================================


struct  BFs7c_BFu7s_BFs7ll_BFu7ll  {
  signed char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7ll_BFu7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFs7c_BFu7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7ll_BFu7ll, BFs7c_BFu7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFu7s_BFs7ll_BFu7s  {
  signed char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7ll_BFu7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7ll_BFu7s, BFs7c_BFu7s_BFs7ll_BFu7s)
//============================================================================


struct  BFs7c_BFu7s_BFs7s  {
  signed char v1:7;
  unsigned short v2:7;
  signed short v3:7;
};
//SIG(1 BFs7c_BFu7s_BFs7s) C1{ Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7s, BFs7c_BFu7s_BFs7s)
//============================================================================


struct  BFs7c_BFu7s_BFs7s_BFs7c  {
  signed char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7s_BFs7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7s_BFs7c, BFs7c_BFu7s_BFs7s_BFs7c)
//============================================================================


struct  BFs7c_BFu7s_BFs7s_BFs7i  {
  signed char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7s_BFs7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7s_BFs7i, BFs7c_BFu7s_BFs7s_BFs7i)
//============================================================================


struct  BFs7c_BFu7s_BFs7s_BFs7ll  {
  signed char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7s_BFs7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7s_BFs7ll, BFs7c_BFu7s_BFs7s_BFs7ll)
//============================================================================


struct  BFs7c_BFu7s_BFs7s_BFs7s  {
  signed char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7s_BFs7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7s_BFs7s, BFs7c_BFu7s_BFs7s_BFs7s)
//============================================================================


struct  BFs7c_BFu7s_BFs7s_BFu7c  {
  signed char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7s_BFu7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7s_BFu7c, BFs7c_BFu7s_BFs7s_BFu7c)
//============================================================================


struct  BFs7c_BFu7s_BFs7s_BFu7i  {
  signed char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7s_BFu7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7s_BFu7i, BFs7c_BFu7s_BFs7s_BFu7i)
//============================================================================


struct  BFs7c_BFu7s_BFs7s_BFu7ll  {
  signed char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7s_BFu7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7s_BFu7ll, BFs7c_BFu7s_BFs7s_BFu7ll)
//============================================================================


struct  BFs7c_BFu7s_BFs7s_BFu7s  {
  signed char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFs7s_BFu7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFs7s_BFu7s, BFs7c_BFu7s_BFs7s_BFu7s)
//============================================================================


struct  BFs7c_BFu7s_BFu7c  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7c_BFu7s_BFu7c) C1{ Fc:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7c, BFs7c_BFu7s_BFu7c)
//============================================================================


struct  BFs7c_BFu7s_BFu7c_BFs7c  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7c_BFs7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7c_BFs7c, BFs7c_BFu7s_BFu7c_BFs7c)
//============================================================================


struct  BFs7c_BFu7s_BFu7c_BFs7i  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7c_BFs7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7c_BFs7i, BFs7c_BFu7s_BFu7c_BFs7i)
//============================================================================


struct  BFs7c_BFu7s_BFu7c_BFs7ll  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7c_BFs7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7c_BFs7ll, BFs7c_BFu7s_BFu7c_BFs7ll)
//============================================================================


struct  BFs7c_BFu7s_BFu7c_BFs7s  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7c_BFs7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7c_BFs7s, BFs7c_BFu7s_BFu7c_BFs7s)
//============================================================================


struct  BFs7c_BFu7s_BFu7c_BFu7c  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7c_BFu7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7c_BFu7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7c_BFu7c, BFs7c_BFu7s_BFu7c_BFu7c)
//============================================================================


struct  BFs7c_BFu7s_BFu7c_BFu7i  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7c_BFu7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7c_BFu7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7c_BFu7i, BFs7c_BFu7s_BFu7c_BFu7i)
//============================================================================


struct  BFs7c_BFu7s_BFu7c_BFu7ll  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7c_BFu7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7c_BFu7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7c_BFu7ll, BFs7c_BFu7s_BFu7c_BFu7ll)
//============================================================================


struct  BFs7c_BFu7s_BFu7c_BFu7s  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7c_BFu7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7c_BFu7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7c_BFu7s, BFs7c_BFu7s_BFu7c_BFu7s)
//============================================================================


struct  BFs7c_BFu7s_BFu7i  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7c_BFu7s_BFu7i) C1{ Fc:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7i, BFs7c_BFu7s_BFu7i)
//============================================================================


struct  BFs7c_BFu7s_BFu7i_BFs7c  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7i_BFs7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7i_BFs7c, BFs7c_BFu7s_BFu7i_BFs7c)
//============================================================================


struct  BFs7c_BFu7s_BFu7i_BFs7i  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7i_BFs7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7i_BFs7i, BFs7c_BFu7s_BFu7i_BFs7i)
//============================================================================


struct  BFs7c_BFu7s_BFu7i_BFs7ll  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7i_BFs7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7i_BFs7ll, BFs7c_BFu7s_BFu7i_BFs7ll)
//============================================================================


struct  BFs7c_BFu7s_BFu7i_BFs7s  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7i_BFs7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7i_BFs7s, BFs7c_BFu7s_BFu7i_BFs7s)
//============================================================================


struct  BFs7c_BFu7s_BFu7i_BFu7c  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7i_BFu7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7c_BFu7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7i_BFu7c, BFs7c_BFu7s_BFu7i_BFu7c)
//============================================================================


struct  BFs7c_BFu7s_BFu7i_BFu7i  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7i_BFu7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7c_BFu7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7i_BFu7i, BFs7c_BFu7s_BFu7i_BFu7i)
//============================================================================


struct  BFs7c_BFu7s_BFu7i_BFu7ll  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7i_BFu7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7c_BFu7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7i_BFu7ll, BFs7c_BFu7s_BFu7i_BFu7ll)
//============================================================================


struct  BFs7c_BFu7s_BFu7i_BFu7s  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7i_BFu7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7c_BFu7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7i_BFu7s, BFs7c_BFu7s_BFu7i_BFu7s)
//============================================================================


struct  BFs7c_BFu7s_BFu7ll  {
  signed char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7c_BFu7s_BFu7ll) C1{ Fc:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7ll, BFs7c_BFu7s_BFu7ll)
//============================================================================


struct  BFs7c_BFu7s_BFu7ll_BFs7c  {
  signed char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7ll_BFs7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7ll_BFs7c, BFs7c_BFu7s_BFu7ll_BFs7c)
//============================================================================


struct  BFs7c_BFu7s_BFu7ll_BFs7i  {
  signed char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7ll_BFs7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7ll_BFs7i, BFs7c_BFu7s_BFu7ll_BFs7i)
//============================================================================


struct  BFs7c_BFu7s_BFu7ll_BFs7ll  {
  signed char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7ll_BFs7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFs7c_BFu7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7ll_BFs7ll, BFs7c_BFu7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7c_BFu7s_BFu7ll_BFs7s  {
  signed char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7ll_BFs7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7ll_BFs7s, BFs7c_BFu7s_BFu7ll_BFs7s)
//============================================================================


struct  BFs7c_BFu7s_BFu7ll_BFu7c  {
  signed char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7ll_BFu7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7c_BFu7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7ll_BFu7c, BFs7c_BFu7s_BFu7ll_BFu7c)
//============================================================================


struct  BFs7c_BFu7s_BFu7ll_BFu7i  {
  signed char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7ll_BFu7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7c_BFu7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7ll_BFu7i, BFs7c_BFu7s_BFu7ll_BFu7i)
//============================================================================


struct  BFs7c_BFu7s_BFu7ll_BFu7ll  {
  signed char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7ll_BFu7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFs7c_BFu7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7ll_BFu7ll, BFs7c_BFu7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7c_BFu7s_BFu7ll_BFu7s  {
  signed char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7ll_BFu7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7c_BFu7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7ll_BFu7s, BFs7c_BFu7s_BFu7ll_BFu7s)
//============================================================================


struct  BFs7c_BFu7s_BFu7s  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7c_BFu7s_BFu7s) C1{ Fc:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7s, BFs7c_BFu7s_BFu7s)
//============================================================================


struct  BFs7c_BFu7s_BFu7s_BFs7c  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7s_BFs7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7s_BFs7c, BFs7c_BFu7s_BFu7s_BFs7c)
//============================================================================


struct  BFs7c_BFu7s_BFu7s_BFs7i  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7s_BFs7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7s_BFs7i, BFs7c_BFu7s_BFu7s_BFs7i)
//============================================================================


struct  BFs7c_BFu7s_BFu7s_BFs7ll  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7s_BFs7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7s_BFs7ll, BFs7c_BFu7s_BFu7s_BFs7ll)
//============================================================================


struct  BFs7c_BFu7s_BFu7s_BFs7s  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7s_BFs7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7s_BFs7s, BFs7c_BFu7s_BFu7s_BFs7s)
//============================================================================


struct  BFs7c_BFu7s_BFu7s_BFu7c  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7s_BFu7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7c_BFu7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7s_BFu7c, BFs7c_BFu7s_BFu7s_BFu7c)
//============================================================================


struct  BFs7c_BFu7s_BFu7s_BFu7i  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7s_BFu7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7c_BFu7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7c_BFu7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7s_BFu7i, BFs7c_BFu7s_BFu7s_BFu7i)
//============================================================================


struct  BFs7c_BFu7s_BFu7s_BFu7ll  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7s_BFu7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7c_BFu7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7c_BFu7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7c_BFu7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7s_BFu7ll, BFs7c_BFu7s_BFu7s_BFu7ll)
//============================================================================


struct  BFs7c_BFu7s_BFu7s_BFu7s  {
  signed char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7c_BFu7s_BFu7s_BFu7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7c_BFu7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7c_BFu7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7c_BFu7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7c_BFu7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs7c_BFu7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7c_BFu7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7c_BFu7s_BFu7s_BFu7s, BFs7c_BFu7s_BFu7s_BFu7s)
//============================================================================


struct  BFs7i_BFs7c  {
  signed int v1:7;
  signed char v2:7;
};
//SIG(1 BFs7i_BFs7c) C1{ Fi:7 Fc:7}



static void Test_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c, BFs7i_BFs7c)
//============================================================================


struct  BFs7i_BFs7c_BFs7c  {
  signed int v1:7;
  signed char v2:7;
  signed char v3:7;
};
//SIG(1 BFs7i_BFs7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7c, BFs7i_BFs7c_BFs7c)
//============================================================================


struct  BFs7i_BFs7c_BFs7c_BFs7c  {
  signed int v1:7;
  signed char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7c_BFs7c, BFs7i_BFs7c_BFs7c_BFs7c)
//============================================================================


struct  BFs7i_BFs7c_BFs7c_BFs7i  {
  signed int v1:7;
  signed char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7c_BFs7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7c_BFs7i, BFs7i_BFs7c_BFs7c_BFs7i)
//============================================================================


struct  BFs7i_BFs7c_BFs7c_BFs7ll  {
  signed int v1:7;
  signed char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7c_BFs7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7c_BFs7ll, BFs7i_BFs7c_BFs7c_BFs7ll)
//============================================================================


struct  BFs7i_BFs7c_BFs7c_BFs7s  {
  signed int v1:7;
  signed char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7c_BFs7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7c_BFs7s, BFs7i_BFs7c_BFs7c_BFs7s)
//============================================================================


struct  BFs7i_BFs7c_BFs7c_BFu7c  {
  signed int v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7c_BFu7c, BFs7i_BFs7c_BFs7c_BFu7c)
//============================================================================


struct  BFs7i_BFs7c_BFs7c_BFu7i  {
  signed int v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7c_BFu7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7c_BFu7i, BFs7i_BFs7c_BFs7c_BFu7i)
//============================================================================


struct  BFs7i_BFs7c_BFs7c_BFu7ll  {
  signed int v1:7;
  signed char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7c_BFu7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7c_BFu7ll, BFs7i_BFs7c_BFs7c_BFu7ll)
//============================================================================


struct  BFs7i_BFs7c_BFs7c_BFu7s  {
  signed int v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7c_BFu7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7c_BFu7s, BFs7i_BFs7c_BFs7c_BFu7s)
//============================================================================


struct  BFs7i_BFs7c_BFs7i  {
  signed int v1:7;
  signed char v2:7;
  signed int v3:7;
};
//SIG(1 BFs7i_BFs7c_BFs7i) C1{ Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7i, BFs7i_BFs7c_BFs7i)
//============================================================================


struct  BFs7i_BFs7c_BFs7i_BFs7c  {
  signed int v1:7;
  signed char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7i_BFs7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7i_BFs7c, BFs7i_BFs7c_BFs7i_BFs7c)
//============================================================================


struct  BFs7i_BFs7c_BFs7i_BFs7i  {
  signed int v1:7;
  signed char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7i_BFs7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7i_BFs7i, BFs7i_BFs7c_BFs7i_BFs7i)
//============================================================================


struct  BFs7i_BFs7c_BFs7i_BFs7ll  {
  signed int v1:7;
  signed char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7i_BFs7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7i_BFs7ll, BFs7i_BFs7c_BFs7i_BFs7ll)
//============================================================================


struct  BFs7i_BFs7c_BFs7i_BFs7s  {
  signed int v1:7;
  signed char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7i_BFs7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7i_BFs7s, BFs7i_BFs7c_BFs7i_BFs7s)
//============================================================================


struct  BFs7i_BFs7c_BFs7i_BFu7c  {
  signed int v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7i_BFu7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7i_BFu7c, BFs7i_BFs7c_BFs7i_BFu7c)
//============================================================================


struct  BFs7i_BFs7c_BFs7i_BFu7i  {
  signed int v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7i_BFu7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7i_BFu7i, BFs7i_BFs7c_BFs7i_BFu7i)
//============================================================================


struct  BFs7i_BFs7c_BFs7i_BFu7ll  {
  signed int v1:7;
  signed char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7i_BFu7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7i_BFu7ll, BFs7i_BFs7c_BFs7i_BFu7ll)
//============================================================================


struct  BFs7i_BFs7c_BFs7i_BFu7s  {
  signed int v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7i_BFu7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7i_BFu7s, BFs7i_BFs7c_BFs7i_BFu7s)
//============================================================================


struct  BFs7i_BFs7c_BFs7ll  {
  signed int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7i_BFs7c_BFs7ll) C1{ Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7ll, BFs7i_BFs7c_BFs7ll)
//============================================================================


struct  BFs7i_BFs7c_BFs7ll_BFs7c  {
  signed int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7ll_BFs7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7ll_BFs7c, BFs7i_BFs7c_BFs7ll_BFs7c)
//============================================================================


struct  BFs7i_BFs7c_BFs7ll_BFs7i  {
  signed int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7ll_BFs7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7ll_BFs7i, BFs7i_BFs7c_BFs7ll_BFs7i)
//============================================================================


struct  BFs7i_BFs7c_BFs7ll_BFs7ll  {
  signed int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7ll_BFs7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFs7i_BFs7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7ll_BFs7ll, BFs7i_BFs7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFs7c_BFs7ll_BFs7s  {
  signed int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7ll_BFs7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7ll_BFs7s, BFs7i_BFs7c_BFs7ll_BFs7s)
//============================================================================


struct  BFs7i_BFs7c_BFs7ll_BFu7c  {
  signed int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7ll_BFu7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7ll_BFu7c, BFs7i_BFs7c_BFs7ll_BFu7c)
//============================================================================


struct  BFs7i_BFs7c_BFs7ll_BFu7i  {
  signed int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7ll_BFu7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7ll_BFu7i, BFs7i_BFs7c_BFs7ll_BFu7i)
//============================================================================


struct  BFs7i_BFs7c_BFs7ll_BFu7ll  {
  signed int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7ll_BFu7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFs7i_BFs7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7ll_BFu7ll, BFs7i_BFs7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFs7c_BFs7ll_BFu7s  {
  signed int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7ll_BFu7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7ll_BFu7s, BFs7i_BFs7c_BFs7ll_BFu7s)
//============================================================================


struct  BFs7i_BFs7c_BFs7s  {
  signed int v1:7;
  signed char v2:7;
  signed short v3:7;
};
//SIG(1 BFs7i_BFs7c_BFs7s) C1{ Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7s, BFs7i_BFs7c_BFs7s)
//============================================================================


struct  BFs7i_BFs7c_BFs7s_BFs7c  {
  signed int v1:7;
  signed char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7s_BFs7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7s_BFs7c, BFs7i_BFs7c_BFs7s_BFs7c)
//============================================================================


struct  BFs7i_BFs7c_BFs7s_BFs7i  {
  signed int v1:7;
  signed char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7s_BFs7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7s_BFs7i, BFs7i_BFs7c_BFs7s_BFs7i)
//============================================================================


struct  BFs7i_BFs7c_BFs7s_BFs7ll  {
  signed int v1:7;
  signed char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7s_BFs7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7s_BFs7ll, BFs7i_BFs7c_BFs7s_BFs7ll)
//============================================================================


struct  BFs7i_BFs7c_BFs7s_BFs7s  {
  signed int v1:7;
  signed char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7s_BFs7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7s_BFs7s, BFs7i_BFs7c_BFs7s_BFs7s)
//============================================================================


struct  BFs7i_BFs7c_BFs7s_BFu7c  {
  signed int v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7s_BFu7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7s_BFu7c, BFs7i_BFs7c_BFs7s_BFu7c)
//============================================================================


struct  BFs7i_BFs7c_BFs7s_BFu7i  {
  signed int v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7s_BFu7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7s_BFu7i, BFs7i_BFs7c_BFs7s_BFu7i)
//============================================================================


struct  BFs7i_BFs7c_BFs7s_BFu7ll  {
  signed int v1:7;
  signed char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7s_BFu7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7s_BFu7ll, BFs7i_BFs7c_BFs7s_BFu7ll)
//============================================================================


struct  BFs7i_BFs7c_BFs7s_BFu7s  {
  signed int v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFs7s_BFu7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFs7s_BFu7s, BFs7i_BFs7c_BFs7s_BFu7s)
//============================================================================


struct  BFs7i_BFs7c_BFu7c  {
  signed int v1:7;
  signed char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7i_BFs7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7c, BFs7i_BFs7c_BFu7c)
//============================================================================


struct  BFs7i_BFs7c_BFu7c_BFs7c  {
  signed int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7c_BFs7c, BFs7i_BFs7c_BFu7c_BFs7c)
//============================================================================


struct  BFs7i_BFs7c_BFu7c_BFs7i  {
  signed int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7c_BFs7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7c_BFs7i, BFs7i_BFs7c_BFu7c_BFs7i)
//============================================================================


struct  BFs7i_BFs7c_BFu7c_BFs7ll  {
  signed int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7c_BFs7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7c_BFs7ll, BFs7i_BFs7c_BFu7c_BFs7ll)
//============================================================================


struct  BFs7i_BFs7c_BFu7c_BFs7s  {
  signed int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7c_BFs7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7c_BFs7s, BFs7i_BFs7c_BFu7c_BFs7s)
//============================================================================


struct  BFs7i_BFs7c_BFu7c_BFu7c  {
  signed int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7c_BFu7c, BFs7i_BFs7c_BFu7c_BFu7c)
//============================================================================


struct  BFs7i_BFs7c_BFu7c_BFu7i  {
  signed int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7c_BFu7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7c_BFu7i, BFs7i_BFs7c_BFu7c_BFu7i)
//============================================================================


struct  BFs7i_BFs7c_BFu7c_BFu7ll  {
  signed int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7c_BFu7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7c_BFu7ll, BFs7i_BFs7c_BFu7c_BFu7ll)
//============================================================================


struct  BFs7i_BFs7c_BFu7c_BFu7s  {
  signed int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7c_BFu7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7c_BFu7s, BFs7i_BFs7c_BFu7c_BFu7s)
//============================================================================


struct  BFs7i_BFs7c_BFu7i  {
  signed int v1:7;
  signed char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7i_BFs7c_BFu7i) C1{ Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7i, BFs7i_BFs7c_BFu7i)
//============================================================================


struct  BFs7i_BFs7c_BFu7i_BFs7c  {
  signed int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7i_BFs7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7i_BFs7c, BFs7i_BFs7c_BFu7i_BFs7c)
//============================================================================


struct  BFs7i_BFs7c_BFu7i_BFs7i  {
  signed int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7i_BFs7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7i_BFs7i, BFs7i_BFs7c_BFu7i_BFs7i)
//============================================================================


struct  BFs7i_BFs7c_BFu7i_BFs7ll  {
  signed int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7i_BFs7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7i_BFs7ll, BFs7i_BFs7c_BFu7i_BFs7ll)
//============================================================================


struct  BFs7i_BFs7c_BFu7i_BFs7s  {
  signed int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7i_BFs7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7i_BFs7s, BFs7i_BFs7c_BFu7i_BFs7s)
//============================================================================


struct  BFs7i_BFs7c_BFu7i_BFu7c  {
  signed int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7i_BFu7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7i_BFu7c, BFs7i_BFs7c_BFu7i_BFu7c)
//============================================================================


struct  BFs7i_BFs7c_BFu7i_BFu7i  {
  signed int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7i_BFu7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7i_BFu7i, BFs7i_BFs7c_BFu7i_BFu7i)
//============================================================================


struct  BFs7i_BFs7c_BFu7i_BFu7ll  {
  signed int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7i_BFu7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7i_BFu7ll, BFs7i_BFs7c_BFu7i_BFu7ll)
//============================================================================


struct  BFs7i_BFs7c_BFu7i_BFu7s  {
  signed int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7i_BFu7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7i_BFu7s, BFs7i_BFs7c_BFu7i_BFu7s)
//============================================================================


struct  BFs7i_BFs7c_BFu7ll  {
  signed int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7i_BFs7c_BFu7ll) C1{ Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7ll, BFs7i_BFs7c_BFu7ll)
//============================================================================


struct  BFs7i_BFs7c_BFu7ll_BFs7c  {
  signed int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7ll_BFs7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7ll_BFs7c, BFs7i_BFs7c_BFu7ll_BFs7c)
//============================================================================


struct  BFs7i_BFs7c_BFu7ll_BFs7i  {
  signed int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7ll_BFs7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7ll_BFs7i, BFs7i_BFs7c_BFu7ll_BFs7i)
//============================================================================


struct  BFs7i_BFs7c_BFu7ll_BFs7ll  {
  signed int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7ll_BFs7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFs7i_BFs7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7ll_BFs7ll, BFs7i_BFs7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFs7c_BFu7ll_BFs7s  {
  signed int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7ll_BFs7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7ll_BFs7s, BFs7i_BFs7c_BFu7ll_BFs7s)
//============================================================================


struct  BFs7i_BFs7c_BFu7ll_BFu7c  {
  signed int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7ll_BFu7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7ll_BFu7c, BFs7i_BFs7c_BFu7ll_BFu7c)
//============================================================================


struct  BFs7i_BFs7c_BFu7ll_BFu7i  {
  signed int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7ll_BFu7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7ll_BFu7i, BFs7i_BFs7c_BFu7ll_BFu7i)
//============================================================================


struct  BFs7i_BFs7c_BFu7ll_BFu7ll  {
  signed int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7ll_BFu7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFs7i_BFs7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7ll_BFu7ll, BFs7i_BFs7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFs7c_BFu7ll_BFu7s  {
  signed int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7ll_BFu7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7ll_BFu7s, BFs7i_BFs7c_BFu7ll_BFu7s)
//============================================================================


struct  BFs7i_BFs7c_BFu7s  {
  signed int v1:7;
  signed char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7i_BFs7c_BFu7s) C1{ Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7s, BFs7i_BFs7c_BFu7s)
//============================================================================


struct  BFs7i_BFs7c_BFu7s_BFs7c  {
  signed int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7s_BFs7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7s_BFs7c, BFs7i_BFs7c_BFu7s_BFs7c)
//============================================================================


struct  BFs7i_BFs7c_BFu7s_BFs7i  {
  signed int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7s_BFs7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7s_BFs7i, BFs7i_BFs7c_BFu7s_BFs7i)
//============================================================================


struct  BFs7i_BFs7c_BFu7s_BFs7ll  {
  signed int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7s_BFs7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7s_BFs7ll, BFs7i_BFs7c_BFu7s_BFs7ll)
//============================================================================


struct  BFs7i_BFs7c_BFu7s_BFs7s  {
  signed int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7s_BFs7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7s_BFs7s, BFs7i_BFs7c_BFu7s_BFs7s)
//============================================================================


struct  BFs7i_BFs7c_BFu7s_BFu7c  {
  signed int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7s_BFu7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7s_BFu7c, BFs7i_BFs7c_BFu7s_BFu7c)
//============================================================================


struct  BFs7i_BFs7c_BFu7s_BFu7i  {
  signed int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7s_BFu7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7s_BFu7i, BFs7i_BFs7c_BFu7s_BFu7i)
//============================================================================


struct  BFs7i_BFs7c_BFu7s_BFu7ll  {
  signed int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7s_BFu7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7s_BFu7ll, BFs7i_BFs7c_BFu7s_BFu7ll)
//============================================================================


struct  BFs7i_BFs7c_BFu7s_BFu7s  {
  signed int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7c_BFu7s_BFu7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7c_BFu7s_BFu7s, BFs7i_BFs7c_BFu7s_BFu7s)
//============================================================================


struct  BFs7i_BFs7i  {
  signed int v1:7;
  signed int v2:7;
};
//SIG(1 BFs7i_BFs7i) C1{ Fi:7 Fi:7}



static void Test_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i, BFs7i_BFs7i)
//============================================================================


struct  BFs7i_BFs7i_BFs7c  {
  signed int v1:7;
  signed int v2:7;
  signed char v3:7;
};
//SIG(1 BFs7i_BFs7i_BFs7c) C1{ Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7c, BFs7i_BFs7i_BFs7c)
//============================================================================


struct  BFs7i_BFs7i_BFs7c_BFs7c  {
  signed int v1:7;
  signed int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7c_BFs7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7c_BFs7c, BFs7i_BFs7i_BFs7c_BFs7c)
//============================================================================


struct  BFs7i_BFs7i_BFs7c_BFs7i  {
  signed int v1:7;
  signed int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7c_BFs7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7c_BFs7i, BFs7i_BFs7i_BFs7c_BFs7i)
//============================================================================


struct  BFs7i_BFs7i_BFs7c_BFs7ll  {
  signed int v1:7;
  signed int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7c_BFs7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7c_BFs7ll, BFs7i_BFs7i_BFs7c_BFs7ll)
//============================================================================


struct  BFs7i_BFs7i_BFs7c_BFs7s  {
  signed int v1:7;
  signed int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7c_BFs7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7c_BFs7s, BFs7i_BFs7i_BFs7c_BFs7s)
//============================================================================


struct  BFs7i_BFs7i_BFs7c_BFu7c  {
  signed int v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7c_BFu7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7c_BFu7c, BFs7i_BFs7i_BFs7c_BFu7c)
//============================================================================


struct  BFs7i_BFs7i_BFs7c_BFu7i  {
  signed int v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7c_BFu7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7c_BFu7i, BFs7i_BFs7i_BFs7c_BFu7i)
//============================================================================


struct  BFs7i_BFs7i_BFs7c_BFu7ll  {
  signed int v1:7;
  signed int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7c_BFu7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7c_BFu7ll, BFs7i_BFs7i_BFs7c_BFu7ll)
//============================================================================


struct  BFs7i_BFs7i_BFs7c_BFu7s  {
  signed int v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7c_BFu7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7c_BFu7s, BFs7i_BFs7i_BFs7c_BFu7s)
//============================================================================


struct  BFs7i_BFs7i_BFs7i  {
  signed int v1:7;
  signed int v2:7;
  signed int v3:7;
};
//SIG(1 BFs7i_BFs7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7i, BFs7i_BFs7i_BFs7i)
//============================================================================


struct  BFs7i_BFs7i_BFs7i_BFs7c  {
  signed int v1:7;
  signed int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7i_BFs7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7i_BFs7c, BFs7i_BFs7i_BFs7i_BFs7c)
//============================================================================


struct  BFs7i_BFs7i_BFs7i_BFs7i  {
  signed int v1:7;
  signed int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7i_BFs7i, BFs7i_BFs7i_BFs7i_BFs7i)
//============================================================================


struct  BFs7i_BFs7i_BFs7i_BFs7ll  {
  signed int v1:7;
  signed int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7i_BFs7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7i_BFs7ll, BFs7i_BFs7i_BFs7i_BFs7ll)
//============================================================================


struct  BFs7i_BFs7i_BFs7i_BFs7s  {
  signed int v1:7;
  signed int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7i_BFs7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7i_BFs7s, BFs7i_BFs7i_BFs7i_BFs7s)
//============================================================================


struct  BFs7i_BFs7i_BFs7i_BFu7c  {
  signed int v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7i_BFu7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7i_BFu7c, BFs7i_BFs7i_BFs7i_BFu7c)
//============================================================================


struct  BFs7i_BFs7i_BFs7i_BFu7i  {
  signed int v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7i_BFu7i, BFs7i_BFs7i_BFs7i_BFu7i)
//============================================================================


struct  BFs7i_BFs7i_BFs7i_BFu7ll  {
  signed int v1:7;
  signed int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7i_BFu7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7i_BFu7ll, BFs7i_BFs7i_BFs7i_BFu7ll)
//============================================================================


struct  BFs7i_BFs7i_BFs7i_BFu7s  {
  signed int v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7i_BFu7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7i_BFu7s, BFs7i_BFs7i_BFs7i_BFu7s)
//============================================================================


struct  BFs7i_BFs7i_BFs7ll  {
  signed int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7i_BFs7i_BFs7ll) C1{ Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7ll, BFs7i_BFs7i_BFs7ll)
//============================================================================


struct  BFs7i_BFs7i_BFs7ll_BFs7c  {
  signed int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7ll_BFs7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7ll_BFs7c, BFs7i_BFs7i_BFs7ll_BFs7c)
//============================================================================


struct  BFs7i_BFs7i_BFs7ll_BFs7i  {
  signed int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7ll_BFs7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7ll_BFs7i, BFs7i_BFs7i_BFs7ll_BFs7i)
//============================================================================


struct  BFs7i_BFs7i_BFs7ll_BFs7ll  {
  signed int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7ll_BFs7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFs7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7ll_BFs7ll, BFs7i_BFs7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFs7i_BFs7ll_BFs7s  {
  signed int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7ll_BFs7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7ll_BFs7s, BFs7i_BFs7i_BFs7ll_BFs7s)
//============================================================================


struct  BFs7i_BFs7i_BFs7ll_BFu7c  {
  signed int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7ll_BFu7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7ll_BFu7c, BFs7i_BFs7i_BFs7ll_BFu7c)
//============================================================================


struct  BFs7i_BFs7i_BFs7ll_BFu7i  {
  signed int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7ll_BFu7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7ll_BFu7i, BFs7i_BFs7i_BFs7ll_BFu7i)
//============================================================================


struct  BFs7i_BFs7i_BFs7ll_BFu7ll  {
  signed int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7ll_BFu7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFs7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7ll_BFu7ll, BFs7i_BFs7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFs7i_BFs7ll_BFu7s  {
  signed int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7ll_BFu7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7ll_BFu7s, BFs7i_BFs7i_BFs7ll_BFu7s)
//============================================================================


struct  BFs7i_BFs7i_BFs7s  {
  signed int v1:7;
  signed int v2:7;
  signed short v3:7;
};
//SIG(1 BFs7i_BFs7i_BFs7s) C1{ Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7s, BFs7i_BFs7i_BFs7s)
//============================================================================


struct  BFs7i_BFs7i_BFs7s_BFs7c  {
  signed int v1:7;
  signed int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7s_BFs7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7s_BFs7c, BFs7i_BFs7i_BFs7s_BFs7c)
//============================================================================


struct  BFs7i_BFs7i_BFs7s_BFs7i  {
  signed int v1:7;
  signed int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7s_BFs7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7s_BFs7i, BFs7i_BFs7i_BFs7s_BFs7i)
//============================================================================


struct  BFs7i_BFs7i_BFs7s_BFs7ll  {
  signed int v1:7;
  signed int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7s_BFs7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7s_BFs7ll, BFs7i_BFs7i_BFs7s_BFs7ll)
//============================================================================


struct  BFs7i_BFs7i_BFs7s_BFs7s  {
  signed int v1:7;
  signed int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7s_BFs7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7s_BFs7s, BFs7i_BFs7i_BFs7s_BFs7s)
//============================================================================


struct  BFs7i_BFs7i_BFs7s_BFu7c  {
  signed int v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7s_BFu7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7s_BFu7c, BFs7i_BFs7i_BFs7s_BFu7c)
//============================================================================


struct  BFs7i_BFs7i_BFs7s_BFu7i  {
  signed int v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7s_BFu7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7s_BFu7i, BFs7i_BFs7i_BFs7s_BFu7i)
//============================================================================


struct  BFs7i_BFs7i_BFs7s_BFu7ll  {
  signed int v1:7;
  signed int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7s_BFu7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7s_BFu7ll, BFs7i_BFs7i_BFs7s_BFu7ll)
//============================================================================


struct  BFs7i_BFs7i_BFs7s_BFu7s  {
  signed int v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFs7s_BFu7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFs7s_BFu7s, BFs7i_BFs7i_BFs7s_BFu7s)
//============================================================================


struct  BFs7i_BFs7i_BFu7c  {
  signed int v1:7;
  signed int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7i_BFs7i_BFu7c) C1{ Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7c, BFs7i_BFs7i_BFu7c)
//============================================================================


struct  BFs7i_BFs7i_BFu7c_BFs7c  {
  signed int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7c_BFs7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7c_BFs7c, BFs7i_BFs7i_BFu7c_BFs7c)
//============================================================================


struct  BFs7i_BFs7i_BFu7c_BFs7i  {
  signed int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7c_BFs7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7c_BFs7i, BFs7i_BFs7i_BFu7c_BFs7i)
//============================================================================


struct  BFs7i_BFs7i_BFu7c_BFs7ll  {
  signed int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7c_BFs7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7c_BFs7ll, BFs7i_BFs7i_BFu7c_BFs7ll)
//============================================================================


struct  BFs7i_BFs7i_BFu7c_BFs7s  {
  signed int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7c_BFs7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7c_BFs7s, BFs7i_BFs7i_BFu7c_BFs7s)
//============================================================================


struct  BFs7i_BFs7i_BFu7c_BFu7c  {
  signed int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7c_BFu7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7c_BFu7c, BFs7i_BFs7i_BFu7c_BFu7c)
//============================================================================


struct  BFs7i_BFs7i_BFu7c_BFu7i  {
  signed int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7c_BFu7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7c_BFu7i, BFs7i_BFs7i_BFu7c_BFu7i)
//============================================================================


struct  BFs7i_BFs7i_BFu7c_BFu7ll  {
  signed int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7c_BFu7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7c_BFu7ll, BFs7i_BFs7i_BFu7c_BFu7ll)
//============================================================================


struct  BFs7i_BFs7i_BFu7c_BFu7s  {
  signed int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7c_BFu7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7c_BFu7s, BFs7i_BFs7i_BFu7c_BFu7s)
//============================================================================


struct  BFs7i_BFs7i_BFu7i  {
  signed int v1:7;
  signed int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7i_BFs7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7i, BFs7i_BFs7i_BFu7i)
//============================================================================


struct  BFs7i_BFs7i_BFu7i_BFs7c  {
  signed int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7i_BFs7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7i_BFs7c, BFs7i_BFs7i_BFu7i_BFs7c)
//============================================================================


struct  BFs7i_BFs7i_BFu7i_BFs7i  {
  signed int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7i_BFs7i, BFs7i_BFs7i_BFu7i_BFs7i)
//============================================================================


struct  BFs7i_BFs7i_BFu7i_BFs7ll  {
  signed int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7i_BFs7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7i_BFs7ll, BFs7i_BFs7i_BFu7i_BFs7ll)
//============================================================================


struct  BFs7i_BFs7i_BFu7i_BFs7s  {
  signed int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7i_BFs7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7i_BFs7s, BFs7i_BFs7i_BFu7i_BFs7s)
//============================================================================


struct  BFs7i_BFs7i_BFu7i_BFu7c  {
  signed int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7i_BFu7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7i_BFu7c, BFs7i_BFs7i_BFu7i_BFu7c)
//============================================================================


struct  BFs7i_BFs7i_BFu7i_BFu7i  {
  signed int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7i_BFu7i, BFs7i_BFs7i_BFu7i_BFu7i)
//============================================================================


struct  BFs7i_BFs7i_BFu7i_BFu7ll  {
  signed int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7i_BFu7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7i_BFu7ll, BFs7i_BFs7i_BFu7i_BFu7ll)
//============================================================================


struct  BFs7i_BFs7i_BFu7i_BFu7s  {
  signed int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7i_BFu7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7i_BFu7s, BFs7i_BFs7i_BFu7i_BFu7s)
//============================================================================


struct  BFs7i_BFs7i_BFu7ll  {
  signed int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7i_BFs7i_BFu7ll) C1{ Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7ll, BFs7i_BFs7i_BFu7ll)
//============================================================================


struct  BFs7i_BFs7i_BFu7ll_BFs7c  {
  signed int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7ll_BFs7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7ll_BFs7c, BFs7i_BFs7i_BFu7ll_BFs7c)
//============================================================================


struct  BFs7i_BFs7i_BFu7ll_BFs7i  {
  signed int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7ll_BFs7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7ll_BFs7i, BFs7i_BFs7i_BFu7ll_BFs7i)
//============================================================================


struct  BFs7i_BFs7i_BFu7ll_BFs7ll  {
  signed int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7ll_BFs7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFs7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7ll_BFs7ll, BFs7i_BFs7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFs7i_BFu7ll_BFs7s  {
  signed int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7ll_BFs7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7ll_BFs7s, BFs7i_BFs7i_BFu7ll_BFs7s)
//============================================================================


struct  BFs7i_BFs7i_BFu7ll_BFu7c  {
  signed int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7ll_BFu7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7ll_BFu7c, BFs7i_BFs7i_BFu7ll_BFu7c)
//============================================================================


struct  BFs7i_BFs7i_BFu7ll_BFu7i  {
  signed int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7ll_BFu7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7ll_BFu7i, BFs7i_BFs7i_BFu7ll_BFu7i)
//============================================================================


struct  BFs7i_BFs7i_BFu7ll_BFu7ll  {
  signed int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7ll_BFu7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFs7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7ll_BFu7ll, BFs7i_BFs7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFs7i_BFu7ll_BFu7s  {
  signed int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7ll_BFu7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7ll_BFu7s, BFs7i_BFs7i_BFu7ll_BFu7s)
//============================================================================


struct  BFs7i_BFs7i_BFu7s  {
  signed int v1:7;
  signed int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7i_BFs7i_BFu7s) C1{ Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7s, BFs7i_BFs7i_BFu7s)
//============================================================================


struct  BFs7i_BFs7i_BFu7s_BFs7c  {
  signed int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7s_BFs7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7s_BFs7c, BFs7i_BFs7i_BFu7s_BFs7c)
//============================================================================


struct  BFs7i_BFs7i_BFu7s_BFs7i  {
  signed int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7s_BFs7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7s_BFs7i, BFs7i_BFs7i_BFu7s_BFs7i)
//============================================================================


struct  BFs7i_BFs7i_BFu7s_BFs7ll  {
  signed int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7s_BFs7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7s_BFs7ll, BFs7i_BFs7i_BFu7s_BFs7ll)
//============================================================================


struct  BFs7i_BFs7i_BFu7s_BFs7s  {
  signed int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7s_BFs7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7s_BFs7s, BFs7i_BFs7i_BFu7s_BFs7s)
//============================================================================


struct  BFs7i_BFs7i_BFu7s_BFu7c  {
  signed int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7s_BFu7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7s_BFu7c, BFs7i_BFs7i_BFu7s_BFu7c)
//============================================================================


struct  BFs7i_BFs7i_BFu7s_BFu7i  {
  signed int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7s_BFu7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7s_BFu7i, BFs7i_BFs7i_BFu7s_BFu7i)
//============================================================================


struct  BFs7i_BFs7i_BFu7s_BFu7ll  {
  signed int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7s_BFu7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7s_BFu7ll, BFs7i_BFs7i_BFu7s_BFu7ll)
//============================================================================


struct  BFs7i_BFs7i_BFu7s_BFu7s  {
  signed int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7i_BFu7s_BFu7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7i_BFu7s_BFu7s, BFs7i_BFs7i_BFu7s_BFu7s)
//============================================================================


struct  BFs7i_BFs7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
};
//SIG(1 BFs7i_BFs7ll) C1{ Fi:7 FL:7}



static void Test_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll, BFs7i_BFs7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFs7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7c) C1{ Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7c, BFs7i_BFs7ll_BFs7c)
//============================================================================


struct  BFs7i_BFs7ll_BFs7c_BFs7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7c_BFs7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7c_BFs7c, BFs7i_BFs7ll_BFs7c_BFs7c)
//============================================================================


struct  BFs7i_BFs7ll_BFs7c_BFs7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7c_BFs7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7c_BFs7i, BFs7i_BFs7ll_BFs7c_BFs7i)
//============================================================================


struct  BFs7i_BFs7ll_BFs7c_BFs7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7c_BFs7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7c_BFs7ll, BFs7i_BFs7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFs7c_BFs7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7c_BFs7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7c_BFs7s, BFs7i_BFs7ll_BFs7c_BFs7s)
//============================================================================


struct  BFs7i_BFs7ll_BFs7c_BFu7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7c_BFu7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7c_BFu7c, BFs7i_BFs7ll_BFs7c_BFu7c)
//============================================================================


struct  BFs7i_BFs7ll_BFs7c_BFu7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7c_BFu7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7c_BFu7i, BFs7i_BFs7ll_BFs7c_BFu7i)
//============================================================================


struct  BFs7i_BFs7ll_BFs7c_BFu7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7c_BFu7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7c_BFu7ll, BFs7i_BFs7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFs7c_BFu7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7c_BFu7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7c_BFu7s, BFs7i_BFs7ll_BFs7c_BFu7s)
//============================================================================


struct  BFs7i_BFs7ll_BFs7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7i) C1{ Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7i, BFs7i_BFs7ll_BFs7i)
//============================================================================


struct  BFs7i_BFs7ll_BFs7i_BFs7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7i_BFs7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7i_BFs7c, BFs7i_BFs7ll_BFs7i_BFs7c)
//============================================================================


struct  BFs7i_BFs7ll_BFs7i_BFs7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7i_BFs7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7i_BFs7i, BFs7i_BFs7ll_BFs7i_BFs7i)
//============================================================================


struct  BFs7i_BFs7ll_BFs7i_BFs7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7i_BFs7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7i_BFs7ll, BFs7i_BFs7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFs7i_BFs7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7i_BFs7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7i_BFs7s, BFs7i_BFs7ll_BFs7i_BFs7s)
//============================================================================


struct  BFs7i_BFs7ll_BFs7i_BFu7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7i_BFu7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7i_BFu7c, BFs7i_BFs7ll_BFs7i_BFu7c)
//============================================================================


struct  BFs7i_BFs7ll_BFs7i_BFu7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7i_BFu7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7i_BFu7i, BFs7i_BFs7ll_BFs7i_BFu7i)
//============================================================================


struct  BFs7i_BFs7ll_BFs7i_BFu7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7i_BFu7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7i_BFu7ll, BFs7i_BFs7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFs7i_BFu7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7i_BFu7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7i_BFu7s, BFs7i_BFs7ll_BFs7i_BFu7s)
//============================================================================


struct  BFs7i_BFs7ll_BFs7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7ll, BFs7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFs7ll_BFs7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7ll_BFs7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7ll_BFs7c, BFs7i_BFs7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFs7i_BFs7ll_BFs7ll_BFs7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7ll_BFs7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7ll_BFs7i, BFs7i_BFs7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFs7i_BFs7ll_BFs7ll_BFs7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFs7i_BFs7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7ll_BFs7ll, BFs7i_BFs7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFs7ll_BFs7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7ll_BFs7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7ll_BFs7s, BFs7i_BFs7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFs7i_BFs7ll_BFs7ll_BFu7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7ll_BFu7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7ll_BFu7c, BFs7i_BFs7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFs7i_BFs7ll_BFs7ll_BFu7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7ll_BFu7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7ll_BFu7i, BFs7i_BFs7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFs7i_BFs7ll_BFs7ll_BFu7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFs7i_BFs7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7ll_BFu7ll, BFs7i_BFs7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFs7ll_BFu7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7ll_BFu7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7ll_BFu7s, BFs7i_BFs7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFs7i_BFs7ll_BFs7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7s) C1{ Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7s, BFs7i_BFs7ll_BFs7s)
//============================================================================


struct  BFs7i_BFs7ll_BFs7s_BFs7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7s_BFs7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7s_BFs7c, BFs7i_BFs7ll_BFs7s_BFs7c)
//============================================================================


struct  BFs7i_BFs7ll_BFs7s_BFs7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7s_BFs7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7s_BFs7i, BFs7i_BFs7ll_BFs7s_BFs7i)
//============================================================================


struct  BFs7i_BFs7ll_BFs7s_BFs7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7s_BFs7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7s_BFs7ll, BFs7i_BFs7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFs7s_BFs7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7s_BFs7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7s_BFs7s, BFs7i_BFs7ll_BFs7s_BFs7s)
//============================================================================


struct  BFs7i_BFs7ll_BFs7s_BFu7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7s_BFu7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7s_BFu7c, BFs7i_BFs7ll_BFs7s_BFu7c)
//============================================================================


struct  BFs7i_BFs7ll_BFs7s_BFu7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7s_BFu7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7s_BFu7i, BFs7i_BFs7ll_BFs7s_BFu7i)
//============================================================================


struct  BFs7i_BFs7ll_BFs7s_BFu7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7s_BFu7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7s_BFu7ll, BFs7i_BFs7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFs7s_BFu7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFs7s_BFu7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFs7s_BFu7s, BFs7i_BFs7ll_BFs7s_BFu7s)
//============================================================================


struct  BFs7i_BFs7ll_BFu7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7c) C1{ Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7c, BFs7i_BFs7ll_BFu7c)
//============================================================================


struct  BFs7i_BFs7ll_BFu7c_BFs7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7c_BFs7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7c_BFs7c, BFs7i_BFs7ll_BFu7c_BFs7c)
//============================================================================


struct  BFs7i_BFs7ll_BFu7c_BFs7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7c_BFs7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7c_BFs7i, BFs7i_BFs7ll_BFu7c_BFs7i)
//============================================================================


struct  BFs7i_BFs7ll_BFu7c_BFs7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7c_BFs7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7c_BFs7ll, BFs7i_BFs7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFu7c_BFs7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7c_BFs7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7c_BFs7s, BFs7i_BFs7ll_BFu7c_BFs7s)
//============================================================================


struct  BFs7i_BFs7ll_BFu7c_BFu7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7c_BFu7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7c_BFu7c, BFs7i_BFs7ll_BFu7c_BFu7c)
//============================================================================


struct  BFs7i_BFs7ll_BFu7c_BFu7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7c_BFu7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7c_BFu7i, BFs7i_BFs7ll_BFu7c_BFu7i)
//============================================================================


struct  BFs7i_BFs7ll_BFu7c_BFu7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7c_BFu7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7c_BFu7ll, BFs7i_BFs7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFu7c_BFu7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7c_BFu7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7c_BFu7s, BFs7i_BFs7ll_BFu7c_BFu7s)
//============================================================================


struct  BFs7i_BFs7ll_BFu7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7i) C1{ Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7i, BFs7i_BFs7ll_BFu7i)
//============================================================================


struct  BFs7i_BFs7ll_BFu7i_BFs7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7i_BFs7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7i_BFs7c, BFs7i_BFs7ll_BFu7i_BFs7c)
//============================================================================


struct  BFs7i_BFs7ll_BFu7i_BFs7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7i_BFs7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7i_BFs7i, BFs7i_BFs7ll_BFu7i_BFs7i)
//============================================================================


struct  BFs7i_BFs7ll_BFu7i_BFs7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7i_BFs7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7i_BFs7ll, BFs7i_BFs7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFu7i_BFs7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7i_BFs7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7i_BFs7s, BFs7i_BFs7ll_BFu7i_BFs7s)
//============================================================================


struct  BFs7i_BFs7ll_BFu7i_BFu7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7i_BFu7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7i_BFu7c, BFs7i_BFs7ll_BFu7i_BFu7c)
//============================================================================


struct  BFs7i_BFs7ll_BFu7i_BFu7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7i_BFu7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7i_BFu7i, BFs7i_BFs7ll_BFu7i_BFu7i)
//============================================================================


struct  BFs7i_BFs7ll_BFu7i_BFu7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7i_BFu7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7i_BFu7ll, BFs7i_BFs7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFu7i_BFu7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7i_BFu7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7i_BFu7s, BFs7i_BFs7ll_BFu7i_BFu7s)
//============================================================================


struct  BFs7i_BFs7ll_BFu7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7ll, BFs7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFu7ll_BFs7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7ll_BFs7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7ll_BFs7c, BFs7i_BFs7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFs7i_BFs7ll_BFu7ll_BFs7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7ll_BFs7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7ll_BFs7i, BFs7i_BFs7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFs7i_BFs7ll_BFu7ll_BFs7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFs7i_BFs7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7ll_BFs7ll, BFs7i_BFs7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFu7ll_BFs7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7ll_BFs7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7ll_BFs7s, BFs7i_BFs7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFs7i_BFs7ll_BFu7ll_BFu7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7ll_BFu7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7ll_BFu7c, BFs7i_BFs7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFs7i_BFs7ll_BFu7ll_BFu7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7ll_BFu7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7ll_BFu7i, BFs7i_BFs7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFs7i_BFs7ll_BFu7ll_BFu7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFs7i_BFs7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7ll_BFu7ll, BFs7i_BFs7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFu7ll_BFu7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7ll_BFu7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7ll_BFu7s, BFs7i_BFs7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFs7i_BFs7ll_BFu7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7s) C1{ Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7s, BFs7i_BFs7ll_BFu7s)
//============================================================================


struct  BFs7i_BFs7ll_BFu7s_BFs7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7s_BFs7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7s_BFs7c, BFs7i_BFs7ll_BFu7s_BFs7c)
//============================================================================


struct  BFs7i_BFs7ll_BFu7s_BFs7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7s_BFs7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7s_BFs7i, BFs7i_BFs7ll_BFu7s_BFs7i)
//============================================================================


struct  BFs7i_BFs7ll_BFu7s_BFs7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7s_BFs7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7s_BFs7ll, BFs7i_BFs7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFu7s_BFs7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7s_BFs7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7s_BFs7s, BFs7i_BFs7ll_BFu7s_BFs7s)
//============================================================================


struct  BFs7i_BFs7ll_BFu7s_BFu7c  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7s_BFu7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7s_BFu7c, BFs7i_BFs7ll_BFu7s_BFu7c)
//============================================================================


struct  BFs7i_BFs7ll_BFu7s_BFu7i  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7s_BFu7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7s_BFu7i, BFs7i_BFs7ll_BFu7s_BFu7i)
//============================================================================


struct  BFs7i_BFs7ll_BFu7s_BFu7ll  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7s_BFu7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7s_BFu7ll, BFs7i_BFs7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFs7i_BFs7ll_BFu7s_BFu7s  {
  signed int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7ll_BFu7s_BFu7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7ll_BFu7s_BFu7s, BFs7i_BFs7ll_BFu7s_BFu7s)
//============================================================================


struct  BFs7i_BFs7s  {
  signed int v1:7;
  signed short v2:7;
};
//SIG(1 BFs7i_BFs7s) C1{ Fi:7 Fs:7}



static void Test_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s, BFs7i_BFs7s)
//============================================================================


struct  BFs7i_BFs7s_BFs7c  {
  signed int v1:7;
  signed short v2:7;
  signed char v3:7;
};
//SIG(1 BFs7i_BFs7s_BFs7c) C1{ Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7c, BFs7i_BFs7s_BFs7c)
//============================================================================


struct  BFs7i_BFs7s_BFs7c_BFs7c  {
  signed int v1:7;
  signed short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7c_BFs7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7c_BFs7c, BFs7i_BFs7s_BFs7c_BFs7c)
//============================================================================


struct  BFs7i_BFs7s_BFs7c_BFs7i  {
  signed int v1:7;
  signed short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7c_BFs7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7c_BFs7i, BFs7i_BFs7s_BFs7c_BFs7i)
//============================================================================


struct  BFs7i_BFs7s_BFs7c_BFs7ll  {
  signed int v1:7;
  signed short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7c_BFs7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7c_BFs7ll, BFs7i_BFs7s_BFs7c_BFs7ll)
//============================================================================


struct  BFs7i_BFs7s_BFs7c_BFs7s  {
  signed int v1:7;
  signed short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7c_BFs7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7c_BFs7s, BFs7i_BFs7s_BFs7c_BFs7s)
//============================================================================


struct  BFs7i_BFs7s_BFs7c_BFu7c  {
  signed int v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7c_BFu7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7c_BFu7c, BFs7i_BFs7s_BFs7c_BFu7c)
//============================================================================


struct  BFs7i_BFs7s_BFs7c_BFu7i  {
  signed int v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7c_BFu7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7c_BFu7i, BFs7i_BFs7s_BFs7c_BFu7i)
//============================================================================


struct  BFs7i_BFs7s_BFs7c_BFu7ll  {
  signed int v1:7;
  signed short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7c_BFu7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7c_BFu7ll, BFs7i_BFs7s_BFs7c_BFu7ll)
//============================================================================


struct  BFs7i_BFs7s_BFs7c_BFu7s  {
  signed int v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7c_BFu7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7c_BFu7s, BFs7i_BFs7s_BFs7c_BFu7s)
//============================================================================


struct  BFs7i_BFs7s_BFs7i  {
  signed int v1:7;
  signed short v2:7;
  signed int v3:7;
};
//SIG(1 BFs7i_BFs7s_BFs7i) C1{ Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7i, BFs7i_BFs7s_BFs7i)
//============================================================================


struct  BFs7i_BFs7s_BFs7i_BFs7c  {
  signed int v1:7;
  signed short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7i_BFs7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7i_BFs7c, BFs7i_BFs7s_BFs7i_BFs7c)
//============================================================================


struct  BFs7i_BFs7s_BFs7i_BFs7i  {
  signed int v1:7;
  signed short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7i_BFs7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7i_BFs7i, BFs7i_BFs7s_BFs7i_BFs7i)
//============================================================================


struct  BFs7i_BFs7s_BFs7i_BFs7ll  {
  signed int v1:7;
  signed short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7i_BFs7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7i_BFs7ll, BFs7i_BFs7s_BFs7i_BFs7ll)
//============================================================================


struct  BFs7i_BFs7s_BFs7i_BFs7s  {
  signed int v1:7;
  signed short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7i_BFs7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7i_BFs7s, BFs7i_BFs7s_BFs7i_BFs7s)
//============================================================================


struct  BFs7i_BFs7s_BFs7i_BFu7c  {
  signed int v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7i_BFu7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7i_BFu7c, BFs7i_BFs7s_BFs7i_BFu7c)
//============================================================================


struct  BFs7i_BFs7s_BFs7i_BFu7i  {
  signed int v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7i_BFu7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7i_BFu7i, BFs7i_BFs7s_BFs7i_BFu7i)
//============================================================================


struct  BFs7i_BFs7s_BFs7i_BFu7ll  {
  signed int v1:7;
  signed short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7i_BFu7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7i_BFu7ll, BFs7i_BFs7s_BFs7i_BFu7ll)
//============================================================================


struct  BFs7i_BFs7s_BFs7i_BFu7s  {
  signed int v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7i_BFu7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7i_BFu7s, BFs7i_BFs7s_BFs7i_BFu7s)
//============================================================================


struct  BFs7i_BFs7s_BFs7ll  {
  signed int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7i_BFs7s_BFs7ll) C1{ Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7ll, BFs7i_BFs7s_BFs7ll)
//============================================================================


struct  BFs7i_BFs7s_BFs7ll_BFs7c  {
  signed int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7ll_BFs7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7ll_BFs7c, BFs7i_BFs7s_BFs7ll_BFs7c)
//============================================================================


struct  BFs7i_BFs7s_BFs7ll_BFs7i  {
  signed int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7ll_BFs7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7ll_BFs7i, BFs7i_BFs7s_BFs7ll_BFs7i)
//============================================================================


struct  BFs7i_BFs7s_BFs7ll_BFs7ll  {
  signed int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7ll_BFs7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFs7i_BFs7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7ll_BFs7ll, BFs7i_BFs7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFs7s_BFs7ll_BFs7s  {
  signed int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7ll_BFs7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7ll_BFs7s, BFs7i_BFs7s_BFs7ll_BFs7s)
//============================================================================


struct  BFs7i_BFs7s_BFs7ll_BFu7c  {
  signed int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7ll_BFu7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7ll_BFu7c, BFs7i_BFs7s_BFs7ll_BFu7c)
//============================================================================


struct  BFs7i_BFs7s_BFs7ll_BFu7i  {
  signed int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7ll_BFu7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7ll_BFu7i, BFs7i_BFs7s_BFs7ll_BFu7i)
//============================================================================


struct  BFs7i_BFs7s_BFs7ll_BFu7ll  {
  signed int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7ll_BFu7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFs7i_BFs7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7ll_BFu7ll, BFs7i_BFs7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFs7s_BFs7ll_BFu7s  {
  signed int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7ll_BFu7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7ll_BFu7s, BFs7i_BFs7s_BFs7ll_BFu7s)
//============================================================================


struct  BFs7i_BFs7s_BFs7s  {
  signed int v1:7;
  signed short v2:7;
  signed short v3:7;
};
//SIG(1 BFs7i_BFs7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7s, BFs7i_BFs7s_BFs7s)
//============================================================================


struct  BFs7i_BFs7s_BFs7s_BFs7c  {
  signed int v1:7;
  signed short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7s_BFs7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7s_BFs7c, BFs7i_BFs7s_BFs7s_BFs7c)
//============================================================================


struct  BFs7i_BFs7s_BFs7s_BFs7i  {
  signed int v1:7;
  signed short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7s_BFs7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7s_BFs7i, BFs7i_BFs7s_BFs7s_BFs7i)
//============================================================================


struct  BFs7i_BFs7s_BFs7s_BFs7ll  {
  signed int v1:7;
  signed short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7s_BFs7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7s_BFs7ll, BFs7i_BFs7s_BFs7s_BFs7ll)
//============================================================================


struct  BFs7i_BFs7s_BFs7s_BFs7s  {
  signed int v1:7;
  signed short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7s_BFs7s, BFs7i_BFs7s_BFs7s_BFs7s)
//============================================================================


struct  BFs7i_BFs7s_BFs7s_BFu7c  {
  signed int v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7s_BFu7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7s_BFu7c, BFs7i_BFs7s_BFs7s_BFu7c)
//============================================================================


struct  BFs7i_BFs7s_BFs7s_BFu7i  {
  signed int v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7s_BFu7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7s_BFu7i, BFs7i_BFs7s_BFs7s_BFu7i)
//============================================================================


struct  BFs7i_BFs7s_BFs7s_BFu7ll  {
  signed int v1:7;
  signed short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7s_BFu7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7s_BFu7ll, BFs7i_BFs7s_BFs7s_BFu7ll)
//============================================================================


struct  BFs7i_BFs7s_BFs7s_BFu7s  {
  signed int v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFs7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFs7s_BFu7s, BFs7i_BFs7s_BFs7s_BFu7s)
//============================================================================


struct  BFs7i_BFs7s_BFu7c  {
  signed int v1:7;
  signed short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7i_BFs7s_BFu7c) C1{ Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7c, BFs7i_BFs7s_BFu7c)
//============================================================================


struct  BFs7i_BFs7s_BFu7c_BFs7c  {
  signed int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7c_BFs7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7c_BFs7c, BFs7i_BFs7s_BFu7c_BFs7c)
//============================================================================


struct  BFs7i_BFs7s_BFu7c_BFs7i  {
  signed int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7c_BFs7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7c_BFs7i, BFs7i_BFs7s_BFu7c_BFs7i)
//============================================================================


struct  BFs7i_BFs7s_BFu7c_BFs7ll  {
  signed int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7c_BFs7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7c_BFs7ll, BFs7i_BFs7s_BFu7c_BFs7ll)
//============================================================================


struct  BFs7i_BFs7s_BFu7c_BFs7s  {
  signed int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7c_BFs7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7c_BFs7s, BFs7i_BFs7s_BFu7c_BFs7s)
//============================================================================


struct  BFs7i_BFs7s_BFu7c_BFu7c  {
  signed int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7c_BFu7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7i_BFs7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7c_BFu7c, BFs7i_BFs7s_BFu7c_BFu7c)
//============================================================================


struct  BFs7i_BFs7s_BFu7c_BFu7i  {
  signed int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7c_BFu7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7i_BFs7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7c_BFu7i, BFs7i_BFs7s_BFu7c_BFu7i)
//============================================================================


struct  BFs7i_BFs7s_BFu7c_BFu7ll  {
  signed int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7c_BFu7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7i_BFs7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7c_BFu7ll, BFs7i_BFs7s_BFu7c_BFu7ll)
//============================================================================


struct  BFs7i_BFs7s_BFu7c_BFu7s  {
  signed int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7c_BFu7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7i_BFs7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7c_BFu7s, BFs7i_BFs7s_BFu7c_BFu7s)
//============================================================================


struct  BFs7i_BFs7s_BFu7i  {
  signed int v1:7;
  signed short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7i_BFs7s_BFu7i) C1{ Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7i, BFs7i_BFs7s_BFu7i)
//============================================================================


struct  BFs7i_BFs7s_BFu7i_BFs7c  {
  signed int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7i_BFs7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7i_BFs7c, BFs7i_BFs7s_BFu7i_BFs7c)
//============================================================================


struct  BFs7i_BFs7s_BFu7i_BFs7i  {
  signed int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7i_BFs7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7i_BFs7i, BFs7i_BFs7s_BFu7i_BFs7i)
//============================================================================


struct  BFs7i_BFs7s_BFu7i_BFs7ll  {
  signed int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7i_BFs7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7i_BFs7ll, BFs7i_BFs7s_BFu7i_BFs7ll)
//============================================================================


struct  BFs7i_BFs7s_BFu7i_BFs7s  {
  signed int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7i_BFs7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7i_BFs7s, BFs7i_BFs7s_BFu7i_BFs7s)
//============================================================================


struct  BFs7i_BFs7s_BFu7i_BFu7c  {
  signed int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7i_BFu7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7i_BFs7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7i_BFu7c, BFs7i_BFs7s_BFu7i_BFu7c)
//============================================================================


struct  BFs7i_BFs7s_BFu7i_BFu7i  {
  signed int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7i_BFu7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7i_BFs7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7i_BFu7i, BFs7i_BFs7s_BFu7i_BFu7i)
//============================================================================


struct  BFs7i_BFs7s_BFu7i_BFu7ll  {
  signed int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7i_BFu7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7i_BFs7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7i_BFu7ll, BFs7i_BFs7s_BFu7i_BFu7ll)
//============================================================================


struct  BFs7i_BFs7s_BFu7i_BFu7s  {
  signed int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7i_BFu7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7i_BFs7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7i_BFu7s, BFs7i_BFs7s_BFu7i_BFu7s)
//============================================================================


struct  BFs7i_BFs7s_BFu7ll  {
  signed int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7i_BFs7s_BFu7ll) C1{ Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7ll, BFs7i_BFs7s_BFu7ll)
//============================================================================


struct  BFs7i_BFs7s_BFu7ll_BFs7c  {
  signed int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7ll_BFs7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7ll_BFs7c, BFs7i_BFs7s_BFu7ll_BFs7c)
//============================================================================


struct  BFs7i_BFs7s_BFu7ll_BFs7i  {
  signed int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7ll_BFs7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7ll_BFs7i, BFs7i_BFs7s_BFu7ll_BFs7i)
//============================================================================


struct  BFs7i_BFs7s_BFu7ll_BFs7ll  {
  signed int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7ll_BFs7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFs7i_BFs7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7ll_BFs7ll, BFs7i_BFs7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFs7s_BFu7ll_BFs7s  {
  signed int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7ll_BFs7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7ll_BFs7s, BFs7i_BFs7s_BFu7ll_BFs7s)
//============================================================================


struct  BFs7i_BFs7s_BFu7ll_BFu7c  {
  signed int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7ll_BFu7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7i_BFs7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7ll_BFu7c, BFs7i_BFs7s_BFu7ll_BFu7c)
//============================================================================


struct  BFs7i_BFs7s_BFu7ll_BFu7i  {
  signed int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7ll_BFu7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7i_BFs7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7ll_BFu7i, BFs7i_BFs7s_BFu7ll_BFu7i)
//============================================================================


struct  BFs7i_BFs7s_BFu7ll_BFu7ll  {
  signed int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7ll_BFu7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFs7i_BFs7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7ll_BFu7ll, BFs7i_BFs7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFs7s_BFu7ll_BFu7s  {
  signed int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7ll_BFu7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7i_BFs7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7ll_BFu7s, BFs7i_BFs7s_BFu7ll_BFu7s)
//============================================================================


struct  BFs7i_BFs7s_BFu7s  {
  signed int v1:7;
  signed short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7i_BFs7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7s, BFs7i_BFs7s_BFu7s)
//============================================================================


struct  BFs7i_BFs7s_BFu7s_BFs7c  {
  signed int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7s_BFs7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7s_BFs7c, BFs7i_BFs7s_BFu7s_BFs7c)
//============================================================================


struct  BFs7i_BFs7s_BFu7s_BFs7i  {
  signed int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7s_BFs7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7s_BFs7i, BFs7i_BFs7s_BFu7s_BFs7i)
//============================================================================


struct  BFs7i_BFs7s_BFu7s_BFs7ll  {
  signed int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7s_BFs7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7s_BFs7ll, BFs7i_BFs7s_BFu7s_BFs7ll)
//============================================================================


struct  BFs7i_BFs7s_BFu7s_BFs7s  {
  signed int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7s_BFs7s, BFs7i_BFs7s_BFu7s_BFs7s)
//============================================================================


struct  BFs7i_BFs7s_BFu7s_BFu7c  {
  signed int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7s_BFu7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7i_BFs7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7s_BFu7c, BFs7i_BFs7s_BFu7s_BFu7c)
//============================================================================


struct  BFs7i_BFs7s_BFu7s_BFu7i  {
  signed int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7s_BFu7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7i_BFs7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7s_BFu7i, BFs7i_BFs7s_BFu7s_BFu7i)
//============================================================================


struct  BFs7i_BFs7s_BFu7s_BFu7ll  {
  signed int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7s_BFu7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7i_BFs7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFs7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFs7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7s_BFu7ll, BFs7i_BFs7s_BFu7s_BFu7ll)
//============================================================================


struct  BFs7i_BFs7s_BFu7s_BFu7s  {
  signed int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFs7s_BFu7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7i_BFs7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFs7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFs7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFs7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFs7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFs7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFs7s_BFu7s_BFu7s, BFs7i_BFs7s_BFu7s_BFu7s)
//============================================================================


struct  BFs7i_BFu7c  {
  signed int v1:7;
  unsigned char v2:7;
};
//SIG(1 BFs7i_BFu7c) C1{ Fi:7 Fc:7}



static void Test_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c, BFs7i_BFu7c)
//============================================================================


struct  BFs7i_BFu7c_BFs7c  {
  signed int v1:7;
  unsigned char v2:7;
  signed char v3:7;
};
//SIG(1 BFs7i_BFu7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7c, BFs7i_BFu7c_BFs7c)
//============================================================================


struct  BFs7i_BFu7c_BFs7c_BFs7c  {
  signed int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7c_BFs7c, BFs7i_BFu7c_BFs7c_BFs7c)
//============================================================================


struct  BFs7i_BFu7c_BFs7c_BFs7i  {
  signed int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7c_BFs7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7c_BFs7i, BFs7i_BFu7c_BFs7c_BFs7i)
//============================================================================


struct  BFs7i_BFu7c_BFs7c_BFs7ll  {
  signed int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7c_BFs7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7c_BFs7ll, BFs7i_BFu7c_BFs7c_BFs7ll)
//============================================================================


struct  BFs7i_BFu7c_BFs7c_BFs7s  {
  signed int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7c_BFs7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7c_BFs7s, BFs7i_BFu7c_BFs7c_BFs7s)
//============================================================================


struct  BFs7i_BFu7c_BFs7c_BFu7c  {
  signed int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7c_BFu7c, BFs7i_BFu7c_BFs7c_BFu7c)
//============================================================================


struct  BFs7i_BFu7c_BFs7c_BFu7i  {
  signed int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7c_BFu7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7c_BFu7i, BFs7i_BFu7c_BFs7c_BFu7i)
//============================================================================


struct  BFs7i_BFu7c_BFs7c_BFu7ll  {
  signed int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7c_BFu7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7c_BFu7ll, BFs7i_BFu7c_BFs7c_BFu7ll)
//============================================================================


struct  BFs7i_BFu7c_BFs7c_BFu7s  {
  signed int v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7c_BFu7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7c_BFu7s, BFs7i_BFu7c_BFs7c_BFu7s)
//============================================================================


struct  BFs7i_BFu7c_BFs7i  {
  signed int v1:7;
  unsigned char v2:7;
  signed int v3:7;
};
//SIG(1 BFs7i_BFu7c_BFs7i) C1{ Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7i, BFs7i_BFu7c_BFs7i)
//============================================================================


struct  BFs7i_BFu7c_BFs7i_BFs7c  {
  signed int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7i_BFs7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7i_BFs7c, BFs7i_BFu7c_BFs7i_BFs7c)
//============================================================================


struct  BFs7i_BFu7c_BFs7i_BFs7i  {
  signed int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7i_BFs7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7i_BFs7i, BFs7i_BFu7c_BFs7i_BFs7i)
//============================================================================


struct  BFs7i_BFu7c_BFs7i_BFs7ll  {
  signed int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7i_BFs7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7i_BFs7ll, BFs7i_BFu7c_BFs7i_BFs7ll)
//============================================================================


struct  BFs7i_BFu7c_BFs7i_BFs7s  {
  signed int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7i_BFs7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7i_BFs7s, BFs7i_BFu7c_BFs7i_BFs7s)
//============================================================================


struct  BFs7i_BFu7c_BFs7i_BFu7c  {
  signed int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7i_BFu7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7i_BFu7c, BFs7i_BFu7c_BFs7i_BFu7c)
//============================================================================


struct  BFs7i_BFu7c_BFs7i_BFu7i  {
  signed int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7i_BFu7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7i_BFu7i, BFs7i_BFu7c_BFs7i_BFu7i)
//============================================================================


struct  BFs7i_BFu7c_BFs7i_BFu7ll  {
  signed int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7i_BFu7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7i_BFu7ll, BFs7i_BFu7c_BFs7i_BFu7ll)
//============================================================================


struct  BFs7i_BFu7c_BFs7i_BFu7s  {
  signed int v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7i_BFu7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7i_BFu7s, BFs7i_BFu7c_BFs7i_BFu7s)
//============================================================================


struct  BFs7i_BFu7c_BFs7ll  {
  signed int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7i_BFu7c_BFs7ll) C1{ Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7ll, BFs7i_BFu7c_BFs7ll)
//============================================================================


struct  BFs7i_BFu7c_BFs7ll_BFs7c  {
  signed int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7ll_BFs7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7ll_BFs7c, BFs7i_BFu7c_BFs7ll_BFs7c)
//============================================================================


struct  BFs7i_BFu7c_BFs7ll_BFs7i  {
  signed int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7ll_BFs7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7ll_BFs7i, BFs7i_BFu7c_BFs7ll_BFs7i)
//============================================================================


struct  BFs7i_BFu7c_BFs7ll_BFs7ll  {
  signed int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7ll_BFs7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFs7i_BFu7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7ll_BFs7ll, BFs7i_BFu7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFu7c_BFs7ll_BFs7s  {
  signed int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7ll_BFs7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7ll_BFs7s, BFs7i_BFu7c_BFs7ll_BFs7s)
//============================================================================


struct  BFs7i_BFu7c_BFs7ll_BFu7c  {
  signed int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7ll_BFu7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7ll_BFu7c, BFs7i_BFu7c_BFs7ll_BFu7c)
//============================================================================


struct  BFs7i_BFu7c_BFs7ll_BFu7i  {
  signed int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7ll_BFu7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7ll_BFu7i, BFs7i_BFu7c_BFs7ll_BFu7i)
//============================================================================


struct  BFs7i_BFu7c_BFs7ll_BFu7ll  {
  signed int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7ll_BFu7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFs7i_BFu7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7ll_BFu7ll, BFs7i_BFu7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFu7c_BFs7ll_BFu7s  {
  signed int v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7ll_BFu7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7ll_BFu7s, BFs7i_BFu7c_BFs7ll_BFu7s)
//============================================================================


struct  BFs7i_BFu7c_BFs7s  {
  signed int v1:7;
  unsigned char v2:7;
  signed short v3:7;
};
//SIG(1 BFs7i_BFu7c_BFs7s) C1{ Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7s, BFs7i_BFu7c_BFs7s)
//============================================================================


struct  BFs7i_BFu7c_BFs7s_BFs7c  {
  signed int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7s_BFs7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7s_BFs7c, BFs7i_BFu7c_BFs7s_BFs7c)
//============================================================================


struct  BFs7i_BFu7c_BFs7s_BFs7i  {
  signed int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7s_BFs7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7s_BFs7i, BFs7i_BFu7c_BFs7s_BFs7i)
//============================================================================


struct  BFs7i_BFu7c_BFs7s_BFs7ll  {
  signed int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7s_BFs7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7s_BFs7ll, BFs7i_BFu7c_BFs7s_BFs7ll)
//============================================================================


struct  BFs7i_BFu7c_BFs7s_BFs7s  {
  signed int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7s_BFs7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7s_BFs7s, BFs7i_BFu7c_BFs7s_BFs7s)
//============================================================================


struct  BFs7i_BFu7c_BFs7s_BFu7c  {
  signed int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7s_BFu7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7s_BFu7c, BFs7i_BFu7c_BFs7s_BFu7c)
//============================================================================


struct  BFs7i_BFu7c_BFs7s_BFu7i  {
  signed int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7s_BFu7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7s_BFu7i, BFs7i_BFu7c_BFs7s_BFu7i)
//============================================================================


struct  BFs7i_BFu7c_BFs7s_BFu7ll  {
  signed int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7s_BFu7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7s_BFu7ll, BFs7i_BFu7c_BFs7s_BFu7ll)
//============================================================================


struct  BFs7i_BFu7c_BFs7s_BFu7s  {
  signed int v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFs7s_BFu7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFs7s_BFu7s, BFs7i_BFu7c_BFs7s_BFu7s)
//============================================================================


struct  BFs7i_BFu7c_BFu7c  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7i_BFu7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7c, BFs7i_BFu7c_BFu7c)
//============================================================================


struct  BFs7i_BFu7c_BFu7c_BFs7c  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7c_BFs7c, BFs7i_BFu7c_BFu7c_BFs7c)
//============================================================================


struct  BFs7i_BFu7c_BFu7c_BFs7i  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7c_BFs7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7c_BFs7i, BFs7i_BFu7c_BFu7c_BFs7i)
//============================================================================


struct  BFs7i_BFu7c_BFu7c_BFs7ll  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7c_BFs7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7c_BFs7ll, BFs7i_BFu7c_BFu7c_BFs7ll)
//============================================================================


struct  BFs7i_BFu7c_BFu7c_BFs7s  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7c_BFs7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7c_BFs7s, BFs7i_BFu7c_BFu7c_BFs7s)
//============================================================================


struct  BFs7i_BFu7c_BFu7c_BFu7c  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7c_BFu7c, BFs7i_BFu7c_BFu7c_BFu7c)
//============================================================================


struct  BFs7i_BFu7c_BFu7c_BFu7i  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7c_BFu7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7c_BFu7i, BFs7i_BFu7c_BFu7c_BFu7i)
//============================================================================


struct  BFs7i_BFu7c_BFu7c_BFu7ll  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7c_BFu7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7c_BFu7ll, BFs7i_BFu7c_BFu7c_BFu7ll)
//============================================================================


struct  BFs7i_BFu7c_BFu7c_BFu7s  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7c_BFu7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7c_BFu7s, BFs7i_BFu7c_BFu7c_BFu7s)
//============================================================================


struct  BFs7i_BFu7c_BFu7i  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7i_BFu7c_BFu7i) C1{ Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7i, BFs7i_BFu7c_BFu7i)
//============================================================================


struct  BFs7i_BFu7c_BFu7i_BFs7c  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7i_BFs7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7i_BFs7c, BFs7i_BFu7c_BFu7i_BFs7c)
//============================================================================


struct  BFs7i_BFu7c_BFu7i_BFs7i  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7i_BFs7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7i_BFs7i, BFs7i_BFu7c_BFu7i_BFs7i)
//============================================================================


struct  BFs7i_BFu7c_BFu7i_BFs7ll  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7i_BFs7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7i_BFs7ll, BFs7i_BFu7c_BFu7i_BFs7ll)
//============================================================================


struct  BFs7i_BFu7c_BFu7i_BFs7s  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7i_BFs7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7i_BFs7s, BFs7i_BFu7c_BFu7i_BFs7s)
//============================================================================


struct  BFs7i_BFu7c_BFu7i_BFu7c  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7i_BFu7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7i_BFu7c, BFs7i_BFu7c_BFu7i_BFu7c)
//============================================================================


struct  BFs7i_BFu7c_BFu7i_BFu7i  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7i_BFu7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7i_BFu7i, BFs7i_BFu7c_BFu7i_BFu7i)
//============================================================================


struct  BFs7i_BFu7c_BFu7i_BFu7ll  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7i_BFu7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7i_BFu7ll, BFs7i_BFu7c_BFu7i_BFu7ll)
//============================================================================


struct  BFs7i_BFu7c_BFu7i_BFu7s  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7i_BFu7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7i_BFu7s, BFs7i_BFu7c_BFu7i_BFu7s)
//============================================================================


struct  BFs7i_BFu7c_BFu7ll  {
  signed int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7i_BFu7c_BFu7ll) C1{ Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7ll, BFs7i_BFu7c_BFu7ll)
//============================================================================


struct  BFs7i_BFu7c_BFu7ll_BFs7c  {
  signed int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7ll_BFs7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7ll_BFs7c, BFs7i_BFu7c_BFu7ll_BFs7c)
//============================================================================


struct  BFs7i_BFu7c_BFu7ll_BFs7i  {
  signed int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7ll_BFs7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7ll_BFs7i, BFs7i_BFu7c_BFu7ll_BFs7i)
//============================================================================


struct  BFs7i_BFu7c_BFu7ll_BFs7ll  {
  signed int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7ll_BFs7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFs7i_BFu7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7ll_BFs7ll, BFs7i_BFu7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFu7c_BFu7ll_BFs7s  {
  signed int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7ll_BFs7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7ll_BFs7s, BFs7i_BFu7c_BFu7ll_BFs7s)
//============================================================================


struct  BFs7i_BFu7c_BFu7ll_BFu7c  {
  signed int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7ll_BFu7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7ll_BFu7c, BFs7i_BFu7c_BFu7ll_BFu7c)
//============================================================================


struct  BFs7i_BFu7c_BFu7ll_BFu7i  {
  signed int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7ll_BFu7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7ll_BFu7i, BFs7i_BFu7c_BFu7ll_BFu7i)
//============================================================================


struct  BFs7i_BFu7c_BFu7ll_BFu7ll  {
  signed int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7ll_BFu7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFs7i_BFu7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7ll_BFu7ll, BFs7i_BFu7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFu7c_BFu7ll_BFu7s  {
  signed int v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7ll_BFu7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7i_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7ll_BFu7s, BFs7i_BFu7c_BFu7ll_BFu7s)
//============================================================================


struct  BFs7i_BFu7c_BFu7s  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7i_BFu7c_BFu7s) C1{ Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7s, BFs7i_BFu7c_BFu7s)
//============================================================================


struct  BFs7i_BFu7c_BFu7s_BFs7c  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7s_BFs7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7s_BFs7c, BFs7i_BFu7c_BFu7s_BFs7c)
//============================================================================


struct  BFs7i_BFu7c_BFu7s_BFs7i  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7s_BFs7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7s_BFs7i, BFs7i_BFu7c_BFu7s_BFs7i)
//============================================================================


struct  BFs7i_BFu7c_BFu7s_BFs7ll  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7s_BFs7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7s_BFs7ll, BFs7i_BFu7c_BFu7s_BFs7ll)
//============================================================================


struct  BFs7i_BFu7c_BFu7s_BFs7s  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7s_BFs7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7s_BFs7s, BFs7i_BFu7c_BFu7s_BFs7s)
//============================================================================


struct  BFs7i_BFu7c_BFu7s_BFu7c  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7s_BFu7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7s_BFu7c, BFs7i_BFu7c_BFu7s_BFu7c)
//============================================================================


struct  BFs7i_BFu7c_BFu7s_BFu7i  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7s_BFu7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7s_BFu7i, BFs7i_BFu7c_BFu7s_BFu7i)
//============================================================================


struct  BFs7i_BFu7c_BFu7s_BFu7ll  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7s_BFu7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7s_BFu7ll, BFs7i_BFu7c_BFu7s_BFu7ll)
//============================================================================


struct  BFs7i_BFu7c_BFu7s_BFu7s  {
  signed int v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7c_BFu7s_BFu7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7c_BFu7s_BFu7s, BFs7i_BFu7c_BFu7s_BFu7s)
//============================================================================


struct  BFs7i_BFu7i  {
  signed int v1:7;
  unsigned int v2:7;
};
//SIG(1 BFs7i_BFu7i) C1{ Fi:7 Fi:7}



static void Test_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i, BFs7i_BFu7i)
//============================================================================


struct  BFs7i_BFu7i_BFs7c  {
  signed int v1:7;
  unsigned int v2:7;
  signed char v3:7;
};
//SIG(1 BFs7i_BFu7i_BFs7c) C1{ Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7c, BFs7i_BFu7i_BFs7c)
//============================================================================


struct  BFs7i_BFu7i_BFs7c_BFs7c  {
  signed int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7c_BFs7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7c_BFs7c, BFs7i_BFu7i_BFs7c_BFs7c)
//============================================================================


struct  BFs7i_BFu7i_BFs7c_BFs7i  {
  signed int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7c_BFs7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7c_BFs7i, BFs7i_BFu7i_BFs7c_BFs7i)
//============================================================================


struct  BFs7i_BFu7i_BFs7c_BFs7ll  {
  signed int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7c_BFs7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7c_BFs7ll, BFs7i_BFu7i_BFs7c_BFs7ll)
//============================================================================


struct  BFs7i_BFu7i_BFs7c_BFs7s  {
  signed int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7c_BFs7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7c_BFs7s, BFs7i_BFu7i_BFs7c_BFs7s)
//============================================================================


struct  BFs7i_BFu7i_BFs7c_BFu7c  {
  signed int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7c_BFu7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7c_BFu7c, BFs7i_BFu7i_BFs7c_BFu7c)
//============================================================================


struct  BFs7i_BFu7i_BFs7c_BFu7i  {
  signed int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7c_BFu7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7c_BFu7i, BFs7i_BFu7i_BFs7c_BFu7i)
//============================================================================


struct  BFs7i_BFu7i_BFs7c_BFu7ll  {
  signed int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7c_BFu7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7c_BFu7ll, BFs7i_BFu7i_BFs7c_BFu7ll)
//============================================================================


struct  BFs7i_BFu7i_BFs7c_BFu7s  {
  signed int v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7c_BFu7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7c_BFu7s, BFs7i_BFu7i_BFs7c_BFu7s)
//============================================================================


struct  BFs7i_BFu7i_BFs7i  {
  signed int v1:7;
  unsigned int v2:7;
  signed int v3:7;
};
//SIG(1 BFs7i_BFu7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7i, BFs7i_BFu7i_BFs7i)
//============================================================================


struct  BFs7i_BFu7i_BFs7i_BFs7c  {
  signed int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7i_BFs7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7i_BFs7c, BFs7i_BFu7i_BFs7i_BFs7c)
//============================================================================


struct  BFs7i_BFu7i_BFs7i_BFs7i  {
  signed int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7i_BFs7i, BFs7i_BFu7i_BFs7i_BFs7i)
//============================================================================


struct  BFs7i_BFu7i_BFs7i_BFs7ll  {
  signed int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7i_BFs7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7i_BFs7ll, BFs7i_BFu7i_BFs7i_BFs7ll)
//============================================================================


struct  BFs7i_BFu7i_BFs7i_BFs7s  {
  signed int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7i_BFs7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7i_BFs7s, BFs7i_BFu7i_BFs7i_BFs7s)
//============================================================================


struct  BFs7i_BFu7i_BFs7i_BFu7c  {
  signed int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7i_BFu7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7i_BFu7c, BFs7i_BFu7i_BFs7i_BFu7c)
//============================================================================


struct  BFs7i_BFu7i_BFs7i_BFu7i  {
  signed int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7i_BFu7i, BFs7i_BFu7i_BFs7i_BFu7i)
//============================================================================


struct  BFs7i_BFu7i_BFs7i_BFu7ll  {
  signed int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7i_BFu7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7i_BFu7ll, BFs7i_BFu7i_BFs7i_BFu7ll)
//============================================================================


struct  BFs7i_BFu7i_BFs7i_BFu7s  {
  signed int v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7i_BFu7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7i_BFu7s, BFs7i_BFu7i_BFs7i_BFu7s)
//============================================================================


struct  BFs7i_BFu7i_BFs7ll  {
  signed int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7i_BFu7i_BFs7ll) C1{ Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7ll, BFs7i_BFu7i_BFs7ll)
//============================================================================


struct  BFs7i_BFu7i_BFs7ll_BFs7c  {
  signed int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7ll_BFs7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7ll_BFs7c, BFs7i_BFu7i_BFs7ll_BFs7c)
//============================================================================


struct  BFs7i_BFu7i_BFs7ll_BFs7i  {
  signed int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7ll_BFs7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7ll_BFs7i, BFs7i_BFu7i_BFs7ll_BFs7i)
//============================================================================


struct  BFs7i_BFu7i_BFs7ll_BFs7ll  {
  signed int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7ll_BFs7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFu7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7ll_BFs7ll, BFs7i_BFu7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFu7i_BFs7ll_BFs7s  {
  signed int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7ll_BFs7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7ll_BFs7s, BFs7i_BFu7i_BFs7ll_BFs7s)
//============================================================================


struct  BFs7i_BFu7i_BFs7ll_BFu7c  {
  signed int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7ll_BFu7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7ll_BFu7c, BFs7i_BFu7i_BFs7ll_BFu7c)
//============================================================================


struct  BFs7i_BFu7i_BFs7ll_BFu7i  {
  signed int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7ll_BFu7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7ll_BFu7i, BFs7i_BFu7i_BFs7ll_BFu7i)
//============================================================================


struct  BFs7i_BFu7i_BFs7ll_BFu7ll  {
  signed int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7ll_BFu7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFu7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7ll_BFu7ll, BFs7i_BFu7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFu7i_BFs7ll_BFu7s  {
  signed int v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7ll_BFu7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7ll_BFu7s, BFs7i_BFu7i_BFs7ll_BFu7s)
//============================================================================


struct  BFs7i_BFu7i_BFs7s  {
  signed int v1:7;
  unsigned int v2:7;
  signed short v3:7;
};
//SIG(1 BFs7i_BFu7i_BFs7s) C1{ Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7s, BFs7i_BFu7i_BFs7s)
//============================================================================


struct  BFs7i_BFu7i_BFs7s_BFs7c  {
  signed int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7s_BFs7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7s_BFs7c, BFs7i_BFu7i_BFs7s_BFs7c)
//============================================================================


struct  BFs7i_BFu7i_BFs7s_BFs7i  {
  signed int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7s_BFs7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7s_BFs7i, BFs7i_BFu7i_BFs7s_BFs7i)
//============================================================================


struct  BFs7i_BFu7i_BFs7s_BFs7ll  {
  signed int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7s_BFs7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7s_BFs7ll, BFs7i_BFu7i_BFs7s_BFs7ll)
//============================================================================


struct  BFs7i_BFu7i_BFs7s_BFs7s  {
  signed int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7s_BFs7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7s_BFs7s, BFs7i_BFu7i_BFs7s_BFs7s)
//============================================================================


struct  BFs7i_BFu7i_BFs7s_BFu7c  {
  signed int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7s_BFu7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7s_BFu7c, BFs7i_BFu7i_BFs7s_BFu7c)
//============================================================================


struct  BFs7i_BFu7i_BFs7s_BFu7i  {
  signed int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7s_BFu7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7s_BFu7i, BFs7i_BFu7i_BFs7s_BFu7i)
//============================================================================


struct  BFs7i_BFu7i_BFs7s_BFu7ll  {
  signed int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7s_BFu7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7s_BFu7ll, BFs7i_BFu7i_BFs7s_BFu7ll)
//============================================================================


struct  BFs7i_BFu7i_BFs7s_BFu7s  {
  signed int v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFs7s_BFu7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFs7s_BFu7s, BFs7i_BFu7i_BFs7s_BFu7s)
//============================================================================


struct  BFs7i_BFu7i_BFu7c  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7i_BFu7i_BFu7c) C1{ Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7c, BFs7i_BFu7i_BFu7c)
//============================================================================


struct  BFs7i_BFu7i_BFu7c_BFs7c  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7c_BFs7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7c_BFs7c, BFs7i_BFu7i_BFu7c_BFs7c)
//============================================================================


struct  BFs7i_BFu7i_BFu7c_BFs7i  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7c_BFs7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7c_BFs7i, BFs7i_BFu7i_BFu7c_BFs7i)
//============================================================================


struct  BFs7i_BFu7i_BFu7c_BFs7ll  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7c_BFs7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7c_BFs7ll, BFs7i_BFu7i_BFu7c_BFs7ll)
//============================================================================


struct  BFs7i_BFu7i_BFu7c_BFs7s  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7c_BFs7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7c_BFs7s, BFs7i_BFu7i_BFu7c_BFs7s)
//============================================================================


struct  BFs7i_BFu7i_BFu7c_BFu7c  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7c_BFu7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7c_BFu7c, BFs7i_BFu7i_BFu7c_BFu7c)
//============================================================================


struct  BFs7i_BFu7i_BFu7c_BFu7i  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7c_BFu7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7c_BFu7i, BFs7i_BFu7i_BFu7c_BFu7i)
//============================================================================


struct  BFs7i_BFu7i_BFu7c_BFu7ll  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7c_BFu7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7c_BFu7ll, BFs7i_BFu7i_BFu7c_BFu7ll)
//============================================================================


struct  BFs7i_BFu7i_BFu7c_BFu7s  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7c_BFu7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7c_BFu7s, BFs7i_BFu7i_BFu7c_BFu7s)
//============================================================================


struct  BFs7i_BFu7i_BFu7i  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7i_BFu7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7i, BFs7i_BFu7i_BFu7i)
//============================================================================


struct  BFs7i_BFu7i_BFu7i_BFs7c  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7i_BFs7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7i_BFs7c, BFs7i_BFu7i_BFu7i_BFs7c)
//============================================================================


struct  BFs7i_BFu7i_BFu7i_BFs7i  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7i_BFs7i, BFs7i_BFu7i_BFu7i_BFs7i)
//============================================================================


struct  BFs7i_BFu7i_BFu7i_BFs7ll  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7i_BFs7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7i_BFs7ll, BFs7i_BFu7i_BFu7i_BFs7ll)
//============================================================================


struct  BFs7i_BFu7i_BFu7i_BFs7s  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7i_BFs7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7i_BFs7s, BFs7i_BFu7i_BFu7i_BFs7s)
//============================================================================


struct  BFs7i_BFu7i_BFu7i_BFu7c  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7i_BFu7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7i_BFu7c, BFs7i_BFu7i_BFu7i_BFu7c)
//============================================================================


struct  BFs7i_BFu7i_BFu7i_BFu7i  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7i_BFu7i, BFs7i_BFu7i_BFu7i_BFu7i)
//============================================================================


struct  BFs7i_BFu7i_BFu7i_BFu7ll  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7i_BFu7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7i_BFu7ll, BFs7i_BFu7i_BFu7i_BFu7ll)
//============================================================================


struct  BFs7i_BFu7i_BFu7i_BFu7s  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7i_BFu7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7i_BFu7s, BFs7i_BFu7i_BFu7i_BFu7s)
//============================================================================


struct  BFs7i_BFu7i_BFu7ll  {
  signed int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7i_BFu7i_BFu7ll) C1{ Fi:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7ll, BFs7i_BFu7i_BFu7ll)
//============================================================================


struct  BFs7i_BFu7i_BFu7ll_BFs7c  {
  signed int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7ll_BFs7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7ll_BFs7c, BFs7i_BFu7i_BFu7ll_BFs7c)
//============================================================================


struct  BFs7i_BFu7i_BFu7ll_BFs7i  {
  signed int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7ll_BFs7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7ll_BFs7i, BFs7i_BFu7i_BFu7ll_BFs7i)
//============================================================================


struct  BFs7i_BFu7i_BFu7ll_BFs7ll  {
  signed int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7ll_BFs7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFu7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7ll_BFs7ll, BFs7i_BFu7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFu7i_BFu7ll_BFs7s  {
  signed int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7ll_BFs7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7ll_BFs7s, BFs7i_BFu7i_BFu7ll_BFs7s)
//============================================================================


struct  BFs7i_BFu7i_BFu7ll_BFu7c  {
  signed int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7ll_BFu7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7ll_BFu7c, BFs7i_BFu7i_BFu7ll_BFu7c)
//============================================================================


struct  BFs7i_BFu7i_BFu7ll_BFu7i  {
  signed int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7ll_BFu7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7ll_BFu7i, BFs7i_BFu7i_BFu7ll_BFu7i)
//============================================================================


struct  BFs7i_BFu7i_BFu7ll_BFu7ll  {
  signed int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7ll_BFu7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFu7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7ll_BFu7ll, BFs7i_BFu7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFu7i_BFu7ll_BFu7s  {
  signed int v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7ll_BFu7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7ll_BFu7s, BFs7i_BFu7i_BFu7ll_BFu7s)
//============================================================================


struct  BFs7i_BFu7i_BFu7s  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7i_BFu7i_BFu7s) C1{ Fi:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7s, BFs7i_BFu7i_BFu7s)
//============================================================================


struct  BFs7i_BFu7i_BFu7s_BFs7c  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7s_BFs7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7s_BFs7c, BFs7i_BFu7i_BFu7s_BFs7c)
//============================================================================


struct  BFs7i_BFu7i_BFu7s_BFs7i  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7s_BFs7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7s_BFs7i, BFs7i_BFu7i_BFu7s_BFs7i)
//============================================================================


struct  BFs7i_BFu7i_BFu7s_BFs7ll  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7s_BFs7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7s_BFs7ll, BFs7i_BFu7i_BFu7s_BFs7ll)
//============================================================================


struct  BFs7i_BFu7i_BFu7s_BFs7s  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7s_BFs7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7s_BFs7s, BFs7i_BFu7i_BFu7s_BFs7s)
//============================================================================


struct  BFs7i_BFu7i_BFu7s_BFu7c  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7s_BFu7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7s_BFu7c, BFs7i_BFu7i_BFu7s_BFu7c)
//============================================================================


struct  BFs7i_BFu7i_BFu7s_BFu7i  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7s_BFu7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7s_BFu7i, BFs7i_BFu7i_BFu7s_BFu7i)
//============================================================================


struct  BFs7i_BFu7i_BFu7s_BFu7ll  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7s_BFu7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7s_BFu7ll, BFs7i_BFu7i_BFu7s_BFu7ll)
//============================================================================


struct  BFs7i_BFu7i_BFu7s_BFu7s  {
  signed int v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7i_BFu7s_BFu7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7i_BFu7s_BFu7s, BFs7i_BFu7i_BFu7s_BFu7s)
//============================================================================


struct  BFs7i_BFu7ll  {
  signed int v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFs7i_BFu7ll) C1{ Fi:7 FL:7}



static void Test_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll, BFs7i_BFu7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFs7c  {
  signed int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7c) C1{ Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7c, BFs7i_BFu7ll_BFs7c)
//============================================================================


struct  BFs7i_BFu7ll_BFs7c_BFs7c  {
  signed int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7c_BFs7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7c_BFs7c, BFs7i_BFu7ll_BFs7c_BFs7c)
//============================================================================


struct  BFs7i_BFu7ll_BFs7c_BFs7i  {
  signed int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7c_BFs7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7c_BFs7i, BFs7i_BFu7ll_BFs7c_BFs7i)
//============================================================================


struct  BFs7i_BFu7ll_BFs7c_BFs7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7c_BFs7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7c_BFs7ll, BFs7i_BFu7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFs7c_BFs7s  {
  signed int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7c_BFs7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7c_BFs7s, BFs7i_BFu7ll_BFs7c_BFs7s)
//============================================================================


struct  BFs7i_BFu7ll_BFs7c_BFu7c  {
  signed int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7c_BFu7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7c_BFu7c, BFs7i_BFu7ll_BFs7c_BFu7c)
//============================================================================


struct  BFs7i_BFu7ll_BFs7c_BFu7i  {
  signed int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7c_BFu7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7c_BFu7i, BFs7i_BFu7ll_BFs7c_BFu7i)
//============================================================================


struct  BFs7i_BFu7ll_BFs7c_BFu7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7c_BFu7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7c_BFu7ll, BFs7i_BFu7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFs7c_BFu7s  {
  signed int v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7c_BFu7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7c_BFu7s, BFs7i_BFu7ll_BFs7c_BFu7s)
//============================================================================


struct  BFs7i_BFu7ll_BFs7i  {
  signed int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7i) C1{ Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7i, BFs7i_BFu7ll_BFs7i)
//============================================================================


struct  BFs7i_BFu7ll_BFs7i_BFs7c  {
  signed int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7i_BFs7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7i_BFs7c, BFs7i_BFu7ll_BFs7i_BFs7c)
//============================================================================


struct  BFs7i_BFu7ll_BFs7i_BFs7i  {
  signed int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7i_BFs7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7i_BFs7i, BFs7i_BFu7ll_BFs7i_BFs7i)
//============================================================================


struct  BFs7i_BFu7ll_BFs7i_BFs7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7i_BFs7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7i_BFs7ll, BFs7i_BFu7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFs7i_BFs7s  {
  signed int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7i_BFs7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7i_BFs7s, BFs7i_BFu7ll_BFs7i_BFs7s)
//============================================================================


struct  BFs7i_BFu7ll_BFs7i_BFu7c  {
  signed int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7i_BFu7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7i_BFu7c, BFs7i_BFu7ll_BFs7i_BFu7c)
//============================================================================


struct  BFs7i_BFu7ll_BFs7i_BFu7i  {
  signed int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7i_BFu7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7i_BFu7i, BFs7i_BFu7ll_BFs7i_BFu7i)
//============================================================================


struct  BFs7i_BFu7ll_BFs7i_BFu7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7i_BFu7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7i_BFu7ll, BFs7i_BFu7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFs7i_BFu7s  {
  signed int v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7i_BFu7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7i_BFu7s, BFs7i_BFu7ll_BFs7i_BFu7s)
//============================================================================


struct  BFs7i_BFu7ll_BFs7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7ll, BFs7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFs7ll_BFs7c  {
  signed int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7ll_BFs7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7ll_BFs7c, BFs7i_BFu7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFs7i_BFu7ll_BFs7ll_BFs7i  {
  signed int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7ll_BFs7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7ll_BFs7i, BFs7i_BFu7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFs7i_BFu7ll_BFs7ll_BFs7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFs7i_BFu7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7ll_BFs7ll, BFs7i_BFu7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFs7ll_BFs7s  {
  signed int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7ll_BFs7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7ll_BFs7s, BFs7i_BFu7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFs7i_BFu7ll_BFs7ll_BFu7c  {
  signed int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7ll_BFu7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7ll_BFu7c, BFs7i_BFu7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFs7i_BFu7ll_BFs7ll_BFu7i  {
  signed int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7ll_BFu7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7ll_BFu7i, BFs7i_BFu7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFs7i_BFu7ll_BFs7ll_BFu7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFs7i_BFu7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7ll_BFu7ll, BFs7i_BFu7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFs7ll_BFu7s  {
  signed int v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7ll_BFu7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7ll_BFu7s, BFs7i_BFu7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFs7i_BFu7ll_BFs7s  {
  signed int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7s) C1{ Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7s, BFs7i_BFu7ll_BFs7s)
//============================================================================


struct  BFs7i_BFu7ll_BFs7s_BFs7c  {
  signed int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7s_BFs7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7s_BFs7c, BFs7i_BFu7ll_BFs7s_BFs7c)
//============================================================================


struct  BFs7i_BFu7ll_BFs7s_BFs7i  {
  signed int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7s_BFs7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7s_BFs7i, BFs7i_BFu7ll_BFs7s_BFs7i)
//============================================================================


struct  BFs7i_BFu7ll_BFs7s_BFs7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7s_BFs7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7s_BFs7ll, BFs7i_BFu7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFs7s_BFs7s  {
  signed int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7s_BFs7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7s_BFs7s, BFs7i_BFu7ll_BFs7s_BFs7s)
//============================================================================


struct  BFs7i_BFu7ll_BFs7s_BFu7c  {
  signed int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7s_BFu7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7s_BFu7c, BFs7i_BFu7ll_BFs7s_BFu7c)
//============================================================================


struct  BFs7i_BFu7ll_BFs7s_BFu7i  {
  signed int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7s_BFu7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7s_BFu7i, BFs7i_BFu7ll_BFs7s_BFu7i)
//============================================================================


struct  BFs7i_BFu7ll_BFs7s_BFu7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7s_BFu7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7s_BFu7ll, BFs7i_BFu7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFs7s_BFu7s  {
  signed int v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFs7s_BFu7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFs7s_BFu7s, BFs7i_BFu7ll_BFs7s_BFu7s)
//============================================================================


struct  BFs7i_BFu7ll_BFu7c  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7c) C1{ Fi:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7c, BFs7i_BFu7ll_BFu7c)
//============================================================================


struct  BFs7i_BFu7ll_BFu7c_BFs7c  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7c_BFs7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7c_BFs7c, BFs7i_BFu7ll_BFu7c_BFs7c)
//============================================================================


struct  BFs7i_BFu7ll_BFu7c_BFs7i  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7c_BFs7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7c_BFs7i, BFs7i_BFu7ll_BFu7c_BFs7i)
//============================================================================


struct  BFs7i_BFu7ll_BFu7c_BFs7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7c_BFs7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7c_BFs7ll, BFs7i_BFu7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFu7c_BFs7s  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7c_BFs7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7c_BFs7s, BFs7i_BFu7ll_BFu7c_BFs7s)
//============================================================================


struct  BFs7i_BFu7ll_BFu7c_BFu7c  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7c_BFu7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7c_BFu7c, BFs7i_BFu7ll_BFu7c_BFu7c)
//============================================================================


struct  BFs7i_BFu7ll_BFu7c_BFu7i  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7c_BFu7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7c_BFu7i, BFs7i_BFu7ll_BFu7c_BFu7i)
//============================================================================


struct  BFs7i_BFu7ll_BFu7c_BFu7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7c_BFu7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7c_BFu7ll, BFs7i_BFu7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFu7c_BFu7s  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7c_BFu7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7c_BFu7s, BFs7i_BFu7ll_BFu7c_BFu7s)
//============================================================================


struct  BFs7i_BFu7ll_BFu7i  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7i) C1{ Fi:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7i, BFs7i_BFu7ll_BFu7i)
//============================================================================


struct  BFs7i_BFu7ll_BFu7i_BFs7c  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7i_BFs7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7i_BFs7c, BFs7i_BFu7ll_BFu7i_BFs7c)
//============================================================================


struct  BFs7i_BFu7ll_BFu7i_BFs7i  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7i_BFs7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7i_BFs7i, BFs7i_BFu7ll_BFu7i_BFs7i)
//============================================================================


struct  BFs7i_BFu7ll_BFu7i_BFs7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7i_BFs7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7i_BFs7ll, BFs7i_BFu7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFu7i_BFs7s  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7i_BFs7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7i_BFs7s, BFs7i_BFu7ll_BFu7i_BFs7s)
//============================================================================


struct  BFs7i_BFu7ll_BFu7i_BFu7c  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7i_BFu7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7i_BFu7c, BFs7i_BFu7ll_BFu7i_BFu7c)
//============================================================================


struct  BFs7i_BFu7ll_BFu7i_BFu7i  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7i_BFu7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7i_BFu7i, BFs7i_BFu7ll_BFu7i_BFu7i)
//============================================================================


struct  BFs7i_BFu7ll_BFu7i_BFu7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7i_BFu7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7i_BFu7ll, BFs7i_BFu7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFu7i_BFu7s  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7i_BFu7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7i_BFu7s, BFs7i_BFu7ll_BFu7i_BFu7s)
//============================================================================


struct  BFs7i_BFu7ll_BFu7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7}



static void Test_BFs7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7ll, BFs7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFu7ll_BFs7c  {
  signed int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7ll_BFs7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7ll_BFs7c, BFs7i_BFu7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFs7i_BFu7ll_BFu7ll_BFs7i  {
  signed int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7ll_BFs7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7ll_BFs7i, BFs7i_BFu7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFs7i_BFu7ll_BFu7ll_BFs7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFs7i_BFu7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7ll_BFs7ll, BFs7i_BFu7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFu7ll_BFs7s  {
  signed int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7ll_BFs7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7ll_BFs7s, BFs7i_BFu7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFs7i_BFu7ll_BFu7ll_BFu7c  {
  signed int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7ll_BFu7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7ll_BFu7c, BFs7i_BFu7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFs7i_BFu7ll_BFu7ll_BFu7i  {
  signed int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7ll_BFu7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7ll_BFu7i, BFs7i_BFu7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFs7i_BFu7ll_BFu7ll_BFu7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFs7i_BFu7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7ll_BFu7ll, BFs7i_BFu7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFu7ll_BFu7s  {
  signed int v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7ll_BFu7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7ll_BFu7s, BFs7i_BFu7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFs7i_BFu7ll_BFu7s  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7s) C1{ Fi:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7s, BFs7i_BFu7ll_BFu7s)
//============================================================================


struct  BFs7i_BFu7ll_BFu7s_BFs7c  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7s_BFs7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7s_BFs7c, BFs7i_BFu7ll_BFu7s_BFs7c)
//============================================================================


struct  BFs7i_BFu7ll_BFu7s_BFs7i  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7s_BFs7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7s_BFs7i, BFs7i_BFu7ll_BFu7s_BFs7i)
//============================================================================


struct  BFs7i_BFu7ll_BFu7s_BFs7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7s_BFs7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7s_BFs7ll, BFs7i_BFu7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFu7s_BFs7s  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7s_BFs7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7s_BFs7s, BFs7i_BFu7ll_BFu7s_BFs7s)
//============================================================================


struct  BFs7i_BFu7ll_BFu7s_BFu7c  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7s_BFu7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7s_BFu7c, BFs7i_BFu7ll_BFu7s_BFu7c)
//============================================================================


struct  BFs7i_BFu7ll_BFu7s_BFu7i  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7s_BFu7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7s_BFu7i, BFs7i_BFu7ll_BFu7s_BFu7i)
//============================================================================


struct  BFs7i_BFu7ll_BFu7s_BFu7ll  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7s_BFu7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7s_BFu7ll, BFs7i_BFu7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFs7i_BFu7ll_BFu7s_BFu7s  {
  signed int v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7ll_BFu7s_BFu7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7ll_BFu7s_BFu7s, BFs7i_BFu7ll_BFu7s_BFu7s)
//============================================================================


struct  BFs7i_BFu7s  {
  signed int v1:7;
  unsigned short v2:7;
};
//SIG(1 BFs7i_BFu7s) C1{ Fi:7 Fs:7}



static void Test_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s, BFs7i_BFu7s)
//============================================================================


struct  BFs7i_BFu7s_BFs7c  {
  signed int v1:7;
  unsigned short v2:7;
  signed char v3:7;
};
//SIG(1 BFs7i_BFu7s_BFs7c) C1{ Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7c, BFs7i_BFu7s_BFs7c)
//============================================================================


struct  BFs7i_BFu7s_BFs7c_BFs7c  {
  signed int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7c_BFs7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7c_BFs7c, BFs7i_BFu7s_BFs7c_BFs7c)
//============================================================================


struct  BFs7i_BFu7s_BFs7c_BFs7i  {
  signed int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7c_BFs7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7c_BFs7i, BFs7i_BFu7s_BFs7c_BFs7i)
//============================================================================


struct  BFs7i_BFu7s_BFs7c_BFs7ll  {
  signed int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7c_BFs7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7c_BFs7ll, BFs7i_BFu7s_BFs7c_BFs7ll)
//============================================================================


struct  BFs7i_BFu7s_BFs7c_BFs7s  {
  signed int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7c_BFs7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7c_BFs7s, BFs7i_BFu7s_BFs7c_BFs7s)
//============================================================================


struct  BFs7i_BFu7s_BFs7c_BFu7c  {
  signed int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7c_BFu7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7c_BFu7c, BFs7i_BFu7s_BFs7c_BFu7c)
//============================================================================


struct  BFs7i_BFu7s_BFs7c_BFu7i  {
  signed int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7c_BFu7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7c_BFu7i, BFs7i_BFu7s_BFs7c_BFu7i)
//============================================================================


struct  BFs7i_BFu7s_BFs7c_BFu7ll  {
  signed int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7c_BFu7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7c_BFu7ll, BFs7i_BFu7s_BFs7c_BFu7ll)
//============================================================================


struct  BFs7i_BFu7s_BFs7c_BFu7s  {
  signed int v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7c_BFu7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7c_BFu7s, BFs7i_BFu7s_BFs7c_BFu7s)
//============================================================================


struct  BFs7i_BFu7s_BFs7i  {
  signed int v1:7;
  unsigned short v2:7;
  signed int v3:7;
};
//SIG(1 BFs7i_BFu7s_BFs7i) C1{ Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7i, BFs7i_BFu7s_BFs7i)
//============================================================================


struct  BFs7i_BFu7s_BFs7i_BFs7c  {
  signed int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7i_BFs7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7i_BFs7c, BFs7i_BFu7s_BFs7i_BFs7c)
//============================================================================


struct  BFs7i_BFu7s_BFs7i_BFs7i  {
  signed int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7i_BFs7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7i_BFs7i, BFs7i_BFu7s_BFs7i_BFs7i)
//============================================================================


struct  BFs7i_BFu7s_BFs7i_BFs7ll  {
  signed int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7i_BFs7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7i_BFs7ll, BFs7i_BFu7s_BFs7i_BFs7ll)
//============================================================================


struct  BFs7i_BFu7s_BFs7i_BFs7s  {
  signed int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7i_BFs7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7i_BFs7s, BFs7i_BFu7s_BFs7i_BFs7s)
//============================================================================


struct  BFs7i_BFu7s_BFs7i_BFu7c  {
  signed int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7i_BFu7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7i_BFu7c, BFs7i_BFu7s_BFs7i_BFu7c)
//============================================================================


struct  BFs7i_BFu7s_BFs7i_BFu7i  {
  signed int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7i_BFu7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7i_BFu7i, BFs7i_BFu7s_BFs7i_BFu7i)
//============================================================================


struct  BFs7i_BFu7s_BFs7i_BFu7ll  {
  signed int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7i_BFu7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7i_BFu7ll, BFs7i_BFu7s_BFs7i_BFu7ll)
//============================================================================


struct  BFs7i_BFu7s_BFs7i_BFu7s  {
  signed int v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7i_BFu7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7i_BFu7s, BFs7i_BFu7s_BFs7i_BFu7s)
//============================================================================


struct  BFs7i_BFu7s_BFs7ll  {
  signed int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7i_BFu7s_BFs7ll) C1{ Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7ll, BFs7i_BFu7s_BFs7ll)
//============================================================================


struct  BFs7i_BFu7s_BFs7ll_BFs7c  {
  signed int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7ll_BFs7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7ll_BFs7c, BFs7i_BFu7s_BFs7ll_BFs7c)
//============================================================================


struct  BFs7i_BFu7s_BFs7ll_BFs7i  {
  signed int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7ll_BFs7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7ll_BFs7i, BFs7i_BFu7s_BFs7ll_BFs7i)
//============================================================================


struct  BFs7i_BFu7s_BFs7ll_BFs7ll  {
  signed int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7ll_BFs7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFs7i_BFu7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7ll_BFs7ll, BFs7i_BFu7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFu7s_BFs7ll_BFs7s  {
  signed int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7ll_BFs7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7ll_BFs7s, BFs7i_BFu7s_BFs7ll_BFs7s)
//============================================================================


struct  BFs7i_BFu7s_BFs7ll_BFu7c  {
  signed int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7ll_BFu7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7ll_BFu7c, BFs7i_BFu7s_BFs7ll_BFu7c)
//============================================================================


struct  BFs7i_BFu7s_BFs7ll_BFu7i  {
  signed int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7ll_BFu7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7ll_BFu7i, BFs7i_BFu7s_BFs7ll_BFu7i)
//============================================================================


struct  BFs7i_BFu7s_BFs7ll_BFu7ll  {
  signed int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7ll_BFu7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFs7i_BFu7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7ll_BFu7ll, BFs7i_BFu7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFu7s_BFs7ll_BFu7s  {
  signed int v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7ll_BFu7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7ll_BFu7s, BFs7i_BFu7s_BFs7ll_BFu7s)
//============================================================================


struct  BFs7i_BFu7s_BFs7s  {
  signed int v1:7;
  unsigned short v2:7;
  signed short v3:7;
};
//SIG(1 BFs7i_BFu7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7s, BFs7i_BFu7s_BFs7s)
//============================================================================


struct  BFs7i_BFu7s_BFs7s_BFs7c  {
  signed int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7s_BFs7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7s_BFs7c, BFs7i_BFu7s_BFs7s_BFs7c)
//============================================================================


struct  BFs7i_BFu7s_BFs7s_BFs7i  {
  signed int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7s_BFs7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7s_BFs7i, BFs7i_BFu7s_BFs7s_BFs7i)
//============================================================================


struct  BFs7i_BFu7s_BFs7s_BFs7ll  {
  signed int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7s_BFs7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7s_BFs7ll, BFs7i_BFu7s_BFs7s_BFs7ll)
//============================================================================


struct  BFs7i_BFu7s_BFs7s_BFs7s  {
  signed int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7s_BFs7s, BFs7i_BFu7s_BFs7s_BFs7s)
//============================================================================


struct  BFs7i_BFu7s_BFs7s_BFu7c  {
  signed int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7s_BFu7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7s_BFu7c, BFs7i_BFu7s_BFs7s_BFu7c)
//============================================================================


struct  BFs7i_BFu7s_BFs7s_BFu7i  {
  signed int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7s_BFu7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7s_BFu7i, BFs7i_BFu7s_BFs7s_BFu7i)
//============================================================================


struct  BFs7i_BFu7s_BFs7s_BFu7ll  {
  signed int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7s_BFu7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7s_BFu7ll, BFs7i_BFu7s_BFs7s_BFu7ll)
//============================================================================


struct  BFs7i_BFu7s_BFs7s_BFu7s  {
  signed int v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFs7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFs7s_BFu7s, BFs7i_BFu7s_BFs7s_BFu7s)
//============================================================================


struct  BFs7i_BFu7s_BFu7c  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7i_BFu7s_BFu7c) C1{ Fi:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7c, BFs7i_BFu7s_BFu7c)
//============================================================================


struct  BFs7i_BFu7s_BFu7c_BFs7c  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7c_BFs7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7c_BFs7c, BFs7i_BFu7s_BFu7c_BFs7c)
//============================================================================


struct  BFs7i_BFu7s_BFu7c_BFs7i  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7c_BFs7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7c_BFs7i, BFs7i_BFu7s_BFu7c_BFs7i)
//============================================================================


struct  BFs7i_BFu7s_BFu7c_BFs7ll  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7c_BFs7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7c_BFs7ll, BFs7i_BFu7s_BFu7c_BFs7ll)
//============================================================================


struct  BFs7i_BFu7s_BFu7c_BFs7s  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7c_BFs7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7c_BFs7s, BFs7i_BFu7s_BFu7c_BFs7s)
//============================================================================


struct  BFs7i_BFu7s_BFu7c_BFu7c  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7c_BFu7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7i_BFu7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7c_BFu7c, BFs7i_BFu7s_BFu7c_BFu7c)
//============================================================================


struct  BFs7i_BFu7s_BFu7c_BFu7i  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7c_BFu7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7i_BFu7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7c_BFu7i, BFs7i_BFu7s_BFu7c_BFu7i)
//============================================================================


struct  BFs7i_BFu7s_BFu7c_BFu7ll  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7c_BFu7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7i_BFu7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7c_BFu7ll, BFs7i_BFu7s_BFu7c_BFu7ll)
//============================================================================


struct  BFs7i_BFu7s_BFu7c_BFu7s  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7c_BFu7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7i_BFu7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7c_BFu7s, BFs7i_BFu7s_BFu7c_BFu7s)
//============================================================================


struct  BFs7i_BFu7s_BFu7i  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7i_BFu7s_BFu7i) C1{ Fi:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7i, BFs7i_BFu7s_BFu7i)
//============================================================================


struct  BFs7i_BFu7s_BFu7i_BFs7c  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7i_BFs7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7i_BFs7c, BFs7i_BFu7s_BFu7i_BFs7c)
//============================================================================


struct  BFs7i_BFu7s_BFu7i_BFs7i  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7i_BFs7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7i_BFs7i, BFs7i_BFu7s_BFu7i_BFs7i)
//============================================================================


struct  BFs7i_BFu7s_BFu7i_BFs7ll  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7i_BFs7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7i_BFs7ll, BFs7i_BFu7s_BFu7i_BFs7ll)
//============================================================================


struct  BFs7i_BFu7s_BFu7i_BFs7s  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7i_BFs7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7i_BFs7s, BFs7i_BFu7s_BFu7i_BFs7s)
//============================================================================


struct  BFs7i_BFu7s_BFu7i_BFu7c  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7i_BFu7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7i_BFu7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7i_BFu7c, BFs7i_BFu7s_BFu7i_BFu7c)
//============================================================================


struct  BFs7i_BFu7s_BFu7i_BFu7i  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7i_BFu7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7i_BFu7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7i_BFu7i, BFs7i_BFu7s_BFu7i_BFu7i)
//============================================================================


struct  BFs7i_BFu7s_BFu7i_BFu7ll  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7i_BFu7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7i_BFu7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7i_BFu7ll, BFs7i_BFu7s_BFu7i_BFu7ll)
//============================================================================


struct  BFs7i_BFu7s_BFu7i_BFu7s  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7i_BFu7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7i_BFu7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7i_BFu7s, BFs7i_BFu7s_BFu7i_BFu7s)
//============================================================================


struct  BFs7i_BFu7s_BFu7ll  {
  signed int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7i_BFu7s_BFu7ll) C1{ Fi:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7ll, BFs7i_BFu7s_BFu7ll)
//============================================================================


struct  BFs7i_BFu7s_BFu7ll_BFs7c  {
  signed int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7ll_BFs7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7ll_BFs7c, BFs7i_BFu7s_BFu7ll_BFs7c)
//============================================================================


struct  BFs7i_BFu7s_BFu7ll_BFs7i  {
  signed int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7ll_BFs7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7ll_BFs7i, BFs7i_BFu7s_BFu7ll_BFs7i)
//============================================================================


struct  BFs7i_BFu7s_BFu7ll_BFs7ll  {
  signed int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7ll_BFs7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFs7i_BFu7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7ll_BFs7ll, BFs7i_BFu7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7i_BFu7s_BFu7ll_BFs7s  {
  signed int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7ll_BFs7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7ll_BFs7s, BFs7i_BFu7s_BFu7ll_BFs7s)
//============================================================================


struct  BFs7i_BFu7s_BFu7ll_BFu7c  {
  signed int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7ll_BFu7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7i_BFu7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7ll_BFu7c, BFs7i_BFu7s_BFu7ll_BFu7c)
//============================================================================


struct  BFs7i_BFu7s_BFu7ll_BFu7i  {
  signed int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7ll_BFu7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7i_BFu7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7ll_BFu7i, BFs7i_BFu7s_BFu7ll_BFu7i)
//============================================================================


struct  BFs7i_BFu7s_BFu7ll_BFu7ll  {
  signed int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7ll_BFu7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFs7i_BFu7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7ll_BFu7ll, BFs7i_BFu7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7i_BFu7s_BFu7ll_BFu7s  {
  signed int v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7ll_BFu7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7i_BFu7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7i_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7ll_BFu7s, BFs7i_BFu7s_BFu7ll_BFu7s)
//============================================================================


struct  BFs7i_BFu7s_BFu7s  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7i_BFu7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7s, BFs7i_BFu7s_BFu7s)
//============================================================================


struct  BFs7i_BFu7s_BFu7s_BFs7c  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7s_BFs7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7s_BFs7c, BFs7i_BFu7s_BFu7s_BFs7c)
//============================================================================


struct  BFs7i_BFu7s_BFu7s_BFs7i  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7s_BFs7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7s_BFs7i, BFs7i_BFu7s_BFu7s_BFs7i)
//============================================================================


struct  BFs7i_BFu7s_BFu7s_BFs7ll  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7s_BFs7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7s_BFs7ll, BFs7i_BFu7s_BFu7s_BFs7ll)
//============================================================================


struct  BFs7i_BFu7s_BFu7s_BFs7s  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7s_BFs7s, BFs7i_BFu7s_BFu7s_BFs7s)
//============================================================================


struct  BFs7i_BFu7s_BFu7s_BFu7c  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7s_BFu7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7i_BFu7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7s_BFu7c, BFs7i_BFu7s_BFu7s_BFu7c)
//============================================================================


struct  BFs7i_BFu7s_BFu7s_BFu7i  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7s_BFu7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7i_BFu7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7s_BFu7i, BFs7i_BFu7s_BFu7s_BFu7i)
//============================================================================


struct  BFs7i_BFu7s_BFu7s_BFu7ll  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7s_BFu7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7i_BFu7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7i_BFu7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7i_BFu7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7s_BFu7ll, BFs7i_BFu7s_BFu7s_BFu7ll)
//============================================================================


struct  BFs7i_BFu7s_BFu7s_BFu7s  {
  signed int v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7i_BFu7s_BFu7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7i_BFu7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7i_BFu7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7i_BFu7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFs7i_BFu7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs7i_BFu7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7i_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7i_BFu7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7i_BFu7s_BFu7s_BFu7s, BFs7i_BFu7s_BFu7s_BFu7s)
//============================================================================


struct  BFs7ll_BFs7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
};
//SIG(1 BFs7ll_BFs7c) C1{ FL:7 Fc:7}



static void Test_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c, BFs7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFs7c_BFs7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed char v3:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7c) C1{ FL:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7c, BFs7ll_BFs7c_BFs7c)
//============================================================================


struct  BFs7ll_BFs7c_BFs7c_BFs7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7c_BFs7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7c_BFs7c, BFs7ll_BFs7c_BFs7c_BFs7c)
//============================================================================


struct  BFs7ll_BFs7c_BFs7c_BFs7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7c_BFs7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7c_BFs7i, BFs7ll_BFs7c_BFs7c_BFs7i)
//============================================================================


struct  BFs7ll_BFs7c_BFs7c_BFs7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7c_BFs7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7c_BFs7ll, BFs7ll_BFs7c_BFs7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFs7c_BFs7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7c_BFs7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7c_BFs7s, BFs7ll_BFs7c_BFs7c_BFs7s)
//============================================================================


struct  BFs7ll_BFs7c_BFs7c_BFu7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7c_BFu7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7c_BFu7c, BFs7ll_BFs7c_BFs7c_BFu7c)
//============================================================================


struct  BFs7ll_BFs7c_BFs7c_BFu7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7c_BFu7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7c_BFu7i, BFs7ll_BFs7c_BFs7c_BFu7i)
//============================================================================


struct  BFs7ll_BFs7c_BFs7c_BFu7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7c_BFu7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7c_BFu7ll, BFs7ll_BFs7c_BFs7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFs7c_BFu7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7c_BFu7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7c_BFu7s, BFs7ll_BFs7c_BFs7c_BFu7s)
//============================================================================


struct  BFs7ll_BFs7c_BFs7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed int v3:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7i) C1{ FL:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7i, BFs7ll_BFs7c_BFs7i)
//============================================================================


struct  BFs7ll_BFs7c_BFs7i_BFs7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7i_BFs7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7i_BFs7c, BFs7ll_BFs7c_BFs7i_BFs7c)
//============================================================================


struct  BFs7ll_BFs7c_BFs7i_BFs7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7i_BFs7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7i_BFs7i, BFs7ll_BFs7c_BFs7i_BFs7i)
//============================================================================


struct  BFs7ll_BFs7c_BFs7i_BFs7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7i_BFs7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7i_BFs7ll, BFs7ll_BFs7c_BFs7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFs7i_BFs7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7i_BFs7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7i_BFs7s, BFs7ll_BFs7c_BFs7i_BFs7s)
//============================================================================


struct  BFs7ll_BFs7c_BFs7i_BFu7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7i_BFu7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7i_BFu7c, BFs7ll_BFs7c_BFs7i_BFu7c)
//============================================================================


struct  BFs7ll_BFs7c_BFs7i_BFu7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7i_BFu7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7i_BFu7i, BFs7ll_BFs7c_BFs7i_BFu7i)
//============================================================================


struct  BFs7ll_BFs7c_BFs7i_BFu7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7i_BFu7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7i_BFu7ll, BFs7ll_BFs7c_BFs7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFs7i_BFu7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7i_BFu7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7i_BFu7s, BFs7ll_BFs7c_BFs7i_BFu7s)
//============================================================================


struct  BFs7ll_BFs7c_BFs7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7ll) C1{ FL:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7ll, BFs7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFs7ll_BFs7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7ll_BFs7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7ll_BFs7c, BFs7ll_BFs7c_BFs7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFs7c_BFs7ll_BFs7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7ll_BFs7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7ll_BFs7i, BFs7ll_BFs7c_BFs7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFs7c_BFs7ll_BFs7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7ll_BFs7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7ll_BFs7ll, BFs7ll_BFs7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFs7ll_BFs7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7ll_BFs7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7ll_BFs7s, BFs7ll_BFs7c_BFs7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFs7c_BFs7ll_BFu7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7ll_BFu7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7ll_BFu7c, BFs7ll_BFs7c_BFs7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFs7c_BFs7ll_BFu7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7ll_BFu7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7ll_BFu7i, BFs7ll_BFs7c_BFs7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFs7c_BFs7ll_BFu7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7ll_BFu7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7ll_BFu7ll, BFs7ll_BFs7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFs7ll_BFu7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7ll_BFu7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7ll_BFu7s, BFs7ll_BFs7c_BFs7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFs7c_BFs7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed short v3:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7s) C1{ FL:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7s, BFs7ll_BFs7c_BFs7s)
//============================================================================


struct  BFs7ll_BFs7c_BFs7s_BFs7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7s_BFs7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7s_BFs7c, BFs7ll_BFs7c_BFs7s_BFs7c)
//============================================================================


struct  BFs7ll_BFs7c_BFs7s_BFs7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7s_BFs7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7s_BFs7i, BFs7ll_BFs7c_BFs7s_BFs7i)
//============================================================================


struct  BFs7ll_BFs7c_BFs7s_BFs7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7s_BFs7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7s_BFs7ll, BFs7ll_BFs7c_BFs7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFs7s_BFs7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7s_BFs7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7s_BFs7s, BFs7ll_BFs7c_BFs7s_BFs7s)
//============================================================================


struct  BFs7ll_BFs7c_BFs7s_BFu7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7s_BFu7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7s_BFu7c, BFs7ll_BFs7c_BFs7s_BFu7c)
//============================================================================


struct  BFs7ll_BFs7c_BFs7s_BFu7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7s_BFu7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7s_BFu7i, BFs7ll_BFs7c_BFs7s_BFu7i)
//============================================================================


struct  BFs7ll_BFs7c_BFs7s_BFu7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7s_BFu7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7s_BFu7ll, BFs7ll_BFs7c_BFs7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFs7s_BFu7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFs7s_BFu7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFs7s_BFu7s, BFs7ll_BFs7c_BFs7s_BFu7s)
//============================================================================


struct  BFs7ll_BFs7c_BFu7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7c) C1{ FL:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7c, BFs7ll_BFs7c_BFu7c)
//============================================================================


struct  BFs7ll_BFs7c_BFu7c_BFs7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7c_BFs7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7c_BFs7c, BFs7ll_BFs7c_BFu7c_BFs7c)
//============================================================================


struct  BFs7ll_BFs7c_BFu7c_BFs7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7c_BFs7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7c_BFs7i, BFs7ll_BFs7c_BFu7c_BFs7i)
//============================================================================


struct  BFs7ll_BFs7c_BFu7c_BFs7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7c_BFs7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7c_BFs7ll, BFs7ll_BFs7c_BFu7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFu7c_BFs7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7c_BFs7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7c_BFs7s, BFs7ll_BFs7c_BFu7c_BFs7s)
//============================================================================


struct  BFs7ll_BFs7c_BFu7c_BFu7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7c_BFu7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7c_BFu7c, BFs7ll_BFs7c_BFu7c_BFu7c)
//============================================================================


struct  BFs7ll_BFs7c_BFu7c_BFu7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7c_BFu7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7c_BFu7i, BFs7ll_BFs7c_BFu7c_BFu7i)
//============================================================================


struct  BFs7ll_BFs7c_BFu7c_BFu7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7c_BFu7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7c_BFu7ll, BFs7ll_BFs7c_BFu7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFu7c_BFu7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7c_BFu7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7c_BFu7s, BFs7ll_BFs7c_BFu7c_BFu7s)
//============================================================================


struct  BFs7ll_BFs7c_BFu7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7i) C1{ FL:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7i, BFs7ll_BFs7c_BFu7i)
//============================================================================


struct  BFs7ll_BFs7c_BFu7i_BFs7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7i_BFs7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7i_BFs7c, BFs7ll_BFs7c_BFu7i_BFs7c)
//============================================================================


struct  BFs7ll_BFs7c_BFu7i_BFs7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7i_BFs7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7i_BFs7i, BFs7ll_BFs7c_BFu7i_BFs7i)
//============================================================================


struct  BFs7ll_BFs7c_BFu7i_BFs7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7i_BFs7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7i_BFs7ll, BFs7ll_BFs7c_BFu7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFu7i_BFs7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7i_BFs7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7i_BFs7s, BFs7ll_BFs7c_BFu7i_BFs7s)
//============================================================================


struct  BFs7ll_BFs7c_BFu7i_BFu7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7i_BFu7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7i_BFu7c, BFs7ll_BFs7c_BFu7i_BFu7c)
//============================================================================


struct  BFs7ll_BFs7c_BFu7i_BFu7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7i_BFu7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7i_BFu7i, BFs7ll_BFs7c_BFu7i_BFu7i)
//============================================================================


struct  BFs7ll_BFs7c_BFu7i_BFu7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7i_BFu7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7i_BFu7ll, BFs7ll_BFs7c_BFu7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFu7i_BFu7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7i_BFu7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7i_BFu7s, BFs7ll_BFs7c_BFu7i_BFu7s)
//============================================================================


struct  BFs7ll_BFs7c_BFu7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7ll) C1{ FL:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7ll, BFs7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFu7ll_BFs7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7ll_BFs7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7ll_BFs7c, BFs7ll_BFs7c_BFu7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFs7c_BFu7ll_BFs7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7ll_BFs7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7ll_BFs7i, BFs7ll_BFs7c_BFu7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFs7c_BFu7ll_BFs7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7ll_BFs7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7ll_BFs7ll, BFs7ll_BFs7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFu7ll_BFs7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7ll_BFs7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7ll_BFs7s, BFs7ll_BFs7c_BFu7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFs7c_BFu7ll_BFu7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7ll_BFu7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7ll_BFu7c, BFs7ll_BFs7c_BFu7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFs7c_BFu7ll_BFu7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7ll_BFu7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7ll_BFu7i, BFs7ll_BFs7c_BFu7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFs7c_BFu7ll_BFu7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7ll_BFu7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7ll_BFu7ll, BFs7ll_BFs7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFu7ll_BFu7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7ll_BFu7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7ll_BFu7s, BFs7ll_BFs7c_BFu7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFs7c_BFu7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7s) C1{ FL:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7s, BFs7ll_BFs7c_BFu7s)
//============================================================================


struct  BFs7ll_BFs7c_BFu7s_BFs7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7s_BFs7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7s_BFs7c, BFs7ll_BFs7c_BFu7s_BFs7c)
//============================================================================


struct  BFs7ll_BFs7c_BFu7s_BFs7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7s_BFs7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7s_BFs7i, BFs7ll_BFs7c_BFu7s_BFs7i)
//============================================================================


struct  BFs7ll_BFs7c_BFu7s_BFs7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7s_BFs7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7s_BFs7ll, BFs7ll_BFs7c_BFu7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFu7s_BFs7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7s_BFs7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7s_BFs7s, BFs7ll_BFs7c_BFu7s_BFs7s)
//============================================================================


struct  BFs7ll_BFs7c_BFu7s_BFu7c  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7s_BFu7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7s_BFu7c, BFs7ll_BFs7c_BFu7s_BFu7c)
//============================================================================


struct  BFs7ll_BFs7c_BFu7s_BFu7i  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7s_BFu7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7s_BFu7i, BFs7ll_BFs7c_BFu7s_BFu7i)
//============================================================================


struct  BFs7ll_BFs7c_BFu7s_BFu7ll  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7s_BFu7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7s_BFu7ll, BFs7ll_BFs7c_BFu7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7c_BFu7s_BFu7s  {
  signed __tsi64 v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7c_BFu7s_BFu7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7c_BFu7s_BFu7s, BFs7ll_BFs7c_BFu7s_BFu7s)
//============================================================================


struct  BFs7ll_BFs7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
};
//SIG(1 BFs7ll_BFs7i) C1{ FL:7 Fi:7}



static void Test_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i, BFs7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFs7i_BFs7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed char v3:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7c) C1{ FL:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7c, BFs7ll_BFs7i_BFs7c)
//============================================================================


struct  BFs7ll_BFs7i_BFs7c_BFs7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7c_BFs7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7c_BFs7c, BFs7ll_BFs7i_BFs7c_BFs7c)
//============================================================================


struct  BFs7ll_BFs7i_BFs7c_BFs7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7c_BFs7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7c_BFs7i, BFs7ll_BFs7i_BFs7c_BFs7i)
//============================================================================


struct  BFs7ll_BFs7i_BFs7c_BFs7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7c_BFs7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7c_BFs7ll, BFs7ll_BFs7i_BFs7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFs7c_BFs7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7c_BFs7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7c_BFs7s, BFs7ll_BFs7i_BFs7c_BFs7s)
//============================================================================


struct  BFs7ll_BFs7i_BFs7c_BFu7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7c_BFu7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7c_BFu7c, BFs7ll_BFs7i_BFs7c_BFu7c)
//============================================================================


struct  BFs7ll_BFs7i_BFs7c_BFu7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7c_BFu7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7c_BFu7i, BFs7ll_BFs7i_BFs7c_BFu7i)
//============================================================================


struct  BFs7ll_BFs7i_BFs7c_BFu7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7c_BFu7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7c_BFu7ll, BFs7ll_BFs7i_BFs7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFs7c_BFu7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7c_BFu7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7c_BFu7s, BFs7ll_BFs7i_BFs7c_BFu7s)
//============================================================================


struct  BFs7ll_BFs7i_BFs7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed int v3:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7i) C1{ FL:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7i, BFs7ll_BFs7i_BFs7i)
//============================================================================


struct  BFs7ll_BFs7i_BFs7i_BFs7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7i_BFs7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7i_BFs7c, BFs7ll_BFs7i_BFs7i_BFs7c)
//============================================================================


struct  BFs7ll_BFs7i_BFs7i_BFs7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7i_BFs7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7i_BFs7i, BFs7ll_BFs7i_BFs7i_BFs7i)
//============================================================================


struct  BFs7ll_BFs7i_BFs7i_BFs7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7i_BFs7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7i_BFs7ll, BFs7ll_BFs7i_BFs7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFs7i_BFs7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7i_BFs7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7i_BFs7s, BFs7ll_BFs7i_BFs7i_BFs7s)
//============================================================================


struct  BFs7ll_BFs7i_BFs7i_BFu7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7i_BFu7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7i_BFu7c, BFs7ll_BFs7i_BFs7i_BFu7c)
//============================================================================


struct  BFs7ll_BFs7i_BFs7i_BFu7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7i_BFu7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7i_BFu7i, BFs7ll_BFs7i_BFs7i_BFu7i)
//============================================================================


struct  BFs7ll_BFs7i_BFs7i_BFu7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7i_BFu7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7i_BFu7ll, BFs7ll_BFs7i_BFs7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFs7i_BFu7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7i_BFu7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7i_BFu7s, BFs7ll_BFs7i_BFs7i_BFu7s)
//============================================================================


struct  BFs7ll_BFs7i_BFs7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7ll) C1{ FL:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7ll, BFs7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFs7ll_BFs7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7ll_BFs7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7ll_BFs7c, BFs7ll_BFs7i_BFs7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFs7i_BFs7ll_BFs7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7ll_BFs7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7ll_BFs7i, BFs7ll_BFs7i_BFs7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFs7i_BFs7ll_BFs7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7ll_BFs7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7ll_BFs7ll, BFs7ll_BFs7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFs7ll_BFs7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7ll_BFs7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7ll_BFs7s, BFs7ll_BFs7i_BFs7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFs7i_BFs7ll_BFu7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7ll_BFu7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7ll_BFu7c, BFs7ll_BFs7i_BFs7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFs7i_BFs7ll_BFu7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7ll_BFu7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7ll_BFu7i, BFs7ll_BFs7i_BFs7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFs7i_BFs7ll_BFu7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7ll_BFu7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7ll_BFu7ll, BFs7ll_BFs7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFs7ll_BFu7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7ll_BFu7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7ll_BFu7s, BFs7ll_BFs7i_BFs7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFs7i_BFs7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed short v3:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7s) C1{ FL:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7s, BFs7ll_BFs7i_BFs7s)
//============================================================================


struct  BFs7ll_BFs7i_BFs7s_BFs7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7s_BFs7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7s_BFs7c, BFs7ll_BFs7i_BFs7s_BFs7c)
//============================================================================


struct  BFs7ll_BFs7i_BFs7s_BFs7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7s_BFs7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7s_BFs7i, BFs7ll_BFs7i_BFs7s_BFs7i)
//============================================================================


struct  BFs7ll_BFs7i_BFs7s_BFs7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7s_BFs7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7s_BFs7ll, BFs7ll_BFs7i_BFs7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFs7s_BFs7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7s_BFs7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7s_BFs7s, BFs7ll_BFs7i_BFs7s_BFs7s)
//============================================================================


struct  BFs7ll_BFs7i_BFs7s_BFu7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7s_BFu7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7s_BFu7c, BFs7ll_BFs7i_BFs7s_BFu7c)
//============================================================================


struct  BFs7ll_BFs7i_BFs7s_BFu7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7s_BFu7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7s_BFu7i, BFs7ll_BFs7i_BFs7s_BFu7i)
//============================================================================


struct  BFs7ll_BFs7i_BFs7s_BFu7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7s_BFu7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7s_BFu7ll, BFs7ll_BFs7i_BFs7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFs7s_BFu7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFs7s_BFu7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFs7s_BFu7s, BFs7ll_BFs7i_BFs7s_BFu7s)
//============================================================================


struct  BFs7ll_BFs7i_BFu7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7c) C1{ FL:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7c, BFs7ll_BFs7i_BFu7c)
//============================================================================


struct  BFs7ll_BFs7i_BFu7c_BFs7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7c_BFs7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7c_BFs7c, BFs7ll_BFs7i_BFu7c_BFs7c)
//============================================================================


struct  BFs7ll_BFs7i_BFu7c_BFs7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7c_BFs7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7c_BFs7i, BFs7ll_BFs7i_BFu7c_BFs7i)
//============================================================================


struct  BFs7ll_BFs7i_BFu7c_BFs7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7c_BFs7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7c_BFs7ll, BFs7ll_BFs7i_BFu7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFu7c_BFs7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7c_BFs7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7c_BFs7s, BFs7ll_BFs7i_BFu7c_BFs7s)
//============================================================================


struct  BFs7ll_BFs7i_BFu7c_BFu7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7c_BFu7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7c_BFu7c, BFs7ll_BFs7i_BFu7c_BFu7c)
//============================================================================


struct  BFs7ll_BFs7i_BFu7c_BFu7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7c_BFu7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7c_BFu7i, BFs7ll_BFs7i_BFu7c_BFu7i)
//============================================================================


struct  BFs7ll_BFs7i_BFu7c_BFu7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7c_BFu7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7c_BFu7ll, BFs7ll_BFs7i_BFu7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFu7c_BFu7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7c_BFu7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7c_BFu7s, BFs7ll_BFs7i_BFu7c_BFu7s)
//============================================================================


struct  BFs7ll_BFs7i_BFu7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7i) C1{ FL:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7i, BFs7ll_BFs7i_BFu7i)
//============================================================================


struct  BFs7ll_BFs7i_BFu7i_BFs7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7i_BFs7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7i_BFs7c, BFs7ll_BFs7i_BFu7i_BFs7c)
//============================================================================


struct  BFs7ll_BFs7i_BFu7i_BFs7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7i_BFs7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7i_BFs7i, BFs7ll_BFs7i_BFu7i_BFs7i)
//============================================================================


struct  BFs7ll_BFs7i_BFu7i_BFs7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7i_BFs7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7i_BFs7ll, BFs7ll_BFs7i_BFu7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFu7i_BFs7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7i_BFs7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7i_BFs7s, BFs7ll_BFs7i_BFu7i_BFs7s)
//============================================================================


struct  BFs7ll_BFs7i_BFu7i_BFu7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7i_BFu7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7i_BFu7c, BFs7ll_BFs7i_BFu7i_BFu7c)
//============================================================================


struct  BFs7ll_BFs7i_BFu7i_BFu7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7i_BFu7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7i_BFu7i, BFs7ll_BFs7i_BFu7i_BFu7i)
//============================================================================


struct  BFs7ll_BFs7i_BFu7i_BFu7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7i_BFu7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7i_BFu7ll, BFs7ll_BFs7i_BFu7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFu7i_BFu7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7i_BFu7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7i_BFu7s, BFs7ll_BFs7i_BFu7i_BFu7s)
//============================================================================


struct  BFs7ll_BFs7i_BFu7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7ll) C1{ FL:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7ll, BFs7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFu7ll_BFs7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7ll_BFs7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7ll_BFs7c, BFs7ll_BFs7i_BFu7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFs7i_BFu7ll_BFs7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7ll_BFs7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7ll_BFs7i, BFs7ll_BFs7i_BFu7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFs7i_BFu7ll_BFs7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7ll_BFs7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7ll_BFs7ll, BFs7ll_BFs7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFu7ll_BFs7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7ll_BFs7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7ll_BFs7s, BFs7ll_BFs7i_BFu7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFs7i_BFu7ll_BFu7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7ll_BFu7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7ll_BFu7c, BFs7ll_BFs7i_BFu7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFs7i_BFu7ll_BFu7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7ll_BFu7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7ll_BFu7i, BFs7ll_BFs7i_BFu7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFs7i_BFu7ll_BFu7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7ll_BFu7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7ll_BFu7ll, BFs7ll_BFs7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFu7ll_BFu7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7ll_BFu7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7ll_BFu7s, BFs7ll_BFs7i_BFu7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFs7i_BFu7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7s) C1{ FL:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7s, BFs7ll_BFs7i_BFu7s)
//============================================================================


struct  BFs7ll_BFs7i_BFu7s_BFs7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7s_BFs7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7s_BFs7c, BFs7ll_BFs7i_BFu7s_BFs7c)
//============================================================================


struct  BFs7ll_BFs7i_BFu7s_BFs7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7s_BFs7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7s_BFs7i, BFs7ll_BFs7i_BFu7s_BFs7i)
//============================================================================


struct  BFs7ll_BFs7i_BFu7s_BFs7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7s_BFs7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7s_BFs7ll, BFs7ll_BFs7i_BFu7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFu7s_BFs7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7s_BFs7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7s_BFs7s, BFs7ll_BFs7i_BFu7s_BFs7s)
//============================================================================


struct  BFs7ll_BFs7i_BFu7s_BFu7c  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7s_BFu7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7s_BFu7c, BFs7ll_BFs7i_BFu7s_BFu7c)
//============================================================================


struct  BFs7ll_BFs7i_BFu7s_BFu7i  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7s_BFu7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7s_BFu7i, BFs7ll_BFs7i_BFu7s_BFu7i)
//============================================================================


struct  BFs7ll_BFs7i_BFu7s_BFu7ll  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7s_BFu7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7s_BFu7ll, BFs7ll_BFs7i_BFu7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7i_BFu7s_BFu7s  {
  signed __tsi64 v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7i_BFu7s_BFu7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7i_BFu7s_BFu7s, BFs7ll_BFs7i_BFu7s_BFu7s)
//============================================================================


struct  BFs7ll_BFs7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
};
//SIG(1 BFs7ll_BFs7ll) C1{ FL:7 FL:7}



static void Test_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll, BFs7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7c) C1{ FL:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7c, BFs7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7c_BFs7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7c_BFs7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7c_BFs7c, BFs7ll_BFs7ll_BFs7c_BFs7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7c_BFs7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7c_BFs7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7c_BFs7i, BFs7ll_BFs7ll_BFs7c_BFs7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7c_BFs7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7c_BFs7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7c_BFs7ll, BFs7ll_BFs7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7c_BFs7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7c_BFs7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7c_BFs7s, BFs7ll_BFs7ll_BFs7c_BFs7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7c_BFu7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7c_BFu7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7c_BFu7c, BFs7ll_BFs7ll_BFs7c_BFu7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7c_BFu7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7c_BFu7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7c_BFu7i, BFs7ll_BFs7ll_BFs7c_BFu7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7c_BFu7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7c_BFu7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7c_BFu7ll, BFs7ll_BFs7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7c_BFu7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7c_BFu7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7c_BFu7s, BFs7ll_BFs7ll_BFs7c_BFu7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7i) C1{ FL:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7i, BFs7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7i_BFs7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7i_BFs7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7i_BFs7c, BFs7ll_BFs7ll_BFs7i_BFs7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7i_BFs7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7i_BFs7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7i_BFs7i, BFs7ll_BFs7ll_BFs7i_BFs7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7i_BFs7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7i_BFs7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7i_BFs7ll, BFs7ll_BFs7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7i_BFs7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7i_BFs7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7i_BFs7s, BFs7ll_BFs7ll_BFs7i_BFs7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7i_BFu7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7i_BFu7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7i_BFu7c, BFs7ll_BFs7ll_BFs7i_BFu7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7i_BFu7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7i_BFu7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7i_BFu7i, BFs7ll_BFs7ll_BFs7i_BFu7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7i_BFu7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7i_BFu7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7i_BFu7ll, BFs7ll_BFs7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7i_BFu7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7i_BFu7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7i_BFu7s, BFs7ll_BFs7ll_BFs7i_BFu7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7ll) C1{ FL:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7ll, BFs7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7ll_BFs7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7ll_BFs7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7ll_BFs7c, BFs7ll_BFs7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7ll_BFs7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7ll_BFs7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7ll_BFs7i, BFs7ll_BFs7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7ll_BFs7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7ll_BFs7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7ll_BFs7ll, BFs7ll_BFs7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7ll_BFs7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7ll_BFs7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7ll_BFs7s, BFs7ll_BFs7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7ll_BFu7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7ll_BFu7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7ll_BFu7c, BFs7ll_BFs7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7ll_BFu7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7ll_BFu7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7ll_BFu7i, BFs7ll_BFs7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7ll_BFu7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7ll_BFu7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7ll_BFu7ll, BFs7ll_BFs7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7ll_BFu7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7ll_BFu7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7ll_BFu7s, BFs7ll_BFs7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7s) C1{ FL:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7s, BFs7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7s_BFs7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7s_BFs7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7s_BFs7c, BFs7ll_BFs7ll_BFs7s_BFs7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7s_BFs7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7s_BFs7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7s_BFs7i, BFs7ll_BFs7ll_BFs7s_BFs7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7s_BFs7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7s_BFs7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7s_BFs7ll, BFs7ll_BFs7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7s_BFs7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7s_BFs7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7s_BFs7s, BFs7ll_BFs7ll_BFs7s_BFs7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7s_BFu7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7s_BFu7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7s_BFu7c, BFs7ll_BFs7ll_BFs7s_BFu7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7s_BFu7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7s_BFu7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7s_BFu7i, BFs7ll_BFs7ll_BFs7s_BFu7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7s_BFu7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7s_BFu7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7s_BFu7ll, BFs7ll_BFs7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFs7s_BFu7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFs7s_BFu7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFs7s_BFu7s, BFs7ll_BFs7ll_BFs7s_BFu7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7c) C1{ FL:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7c, BFs7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7c_BFs7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7c_BFs7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7c_BFs7c, BFs7ll_BFs7ll_BFu7c_BFs7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7c_BFs7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7c_BFs7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7c_BFs7i, BFs7ll_BFs7ll_BFu7c_BFs7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7c_BFs7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7c_BFs7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7c_BFs7ll, BFs7ll_BFs7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7c_BFs7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7c_BFs7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7c_BFs7s, BFs7ll_BFs7ll_BFu7c_BFs7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7c_BFu7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7c_BFu7c) C1{ FL:7 FL:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7c_BFu7c, BFs7ll_BFs7ll_BFu7c_BFu7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7c_BFu7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7c_BFu7i) C1{ FL:7 FL:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7c_BFu7i, BFs7ll_BFs7ll_BFu7c_BFu7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7c_BFu7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7c_BFu7ll) C1{ FL:7 FL:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7c_BFu7ll, BFs7ll_BFs7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7c_BFu7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7c_BFu7s) C1{ FL:7 FL:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7c_BFu7s, BFs7ll_BFs7ll_BFu7c_BFu7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7i) C1{ FL:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7i, BFs7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7i_BFs7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7i_BFs7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7i_BFs7c, BFs7ll_BFs7ll_BFu7i_BFs7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7i_BFs7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7i_BFs7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7i_BFs7i, BFs7ll_BFs7ll_BFu7i_BFs7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7i_BFs7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7i_BFs7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7i_BFs7ll, BFs7ll_BFs7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7i_BFs7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7i_BFs7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7i_BFs7s, BFs7ll_BFs7ll_BFu7i_BFs7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7i_BFu7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7i_BFu7c) C1{ FL:7 FL:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7i_BFu7c, BFs7ll_BFs7ll_BFu7i_BFu7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7i_BFu7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7i_BFu7i) C1{ FL:7 FL:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7i_BFu7i, BFs7ll_BFs7ll_BFu7i_BFu7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7i_BFu7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7i_BFu7ll) C1{ FL:7 FL:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7i_BFu7ll, BFs7ll_BFs7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7i_BFu7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7i_BFu7s) C1{ FL:7 FL:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7i_BFu7s, BFs7ll_BFs7ll_BFu7i_BFu7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7ll) C1{ FL:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7ll, BFs7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7ll_BFs7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7ll_BFs7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7ll_BFs7c, BFs7ll_BFs7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7ll_BFs7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7ll_BFs7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7ll_BFs7i, BFs7ll_BFs7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7ll_BFs7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7ll_BFs7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7ll_BFs7ll, BFs7ll_BFs7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7ll_BFs7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7ll_BFs7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7ll_BFs7s, BFs7ll_BFs7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7ll_BFu7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7ll_BFu7c) C1{ FL:7 FL:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7ll_BFu7c, BFs7ll_BFs7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7ll_BFu7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7ll_BFu7i) C1{ FL:7 FL:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7ll_BFu7i, BFs7ll_BFs7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7ll_BFu7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7ll_BFu7ll) C1{ FL:7 FL:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7ll_BFu7ll, BFs7ll_BFs7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7ll_BFu7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7ll_BFu7s) C1{ FL:7 FL:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7ll_BFu7s, BFs7ll_BFs7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7s) C1{ FL:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7s, BFs7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7s_BFs7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7s_BFs7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7s_BFs7c, BFs7ll_BFs7ll_BFu7s_BFs7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7s_BFs7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7s_BFs7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7s_BFs7i, BFs7ll_BFs7ll_BFu7s_BFs7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7s_BFs7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7s_BFs7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7s_BFs7ll, BFs7ll_BFs7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7s_BFs7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7s_BFs7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7s_BFs7s, BFs7ll_BFs7ll_BFu7s_BFs7s)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7s_BFu7c  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7s_BFu7c) C1{ FL:7 FL:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7s_BFu7c, BFs7ll_BFs7ll_BFu7s_BFu7c)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7s_BFu7i  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7s_BFu7i) C1{ FL:7 FL:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7s_BFu7i, BFs7ll_BFs7ll_BFu7s_BFu7i)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7s_BFu7ll  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7s_BFu7ll) C1{ FL:7 FL:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7s_BFu7ll, BFs7ll_BFs7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7ll_BFu7s_BFu7s  {
  signed __tsi64 v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7ll_BFu7s_BFu7s) C1{ FL:7 FL:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7ll_BFu7s_BFu7s, BFs7ll_BFs7ll_BFu7s_BFu7s)
//============================================================================


struct  BFs7ll_BFs7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
};
//SIG(1 BFs7ll_BFs7s) C1{ FL:7 Fs:7}



static void Test_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s, BFs7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFs7s_BFs7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed char v3:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7c) C1{ FL:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7c, BFs7ll_BFs7s_BFs7c)
//============================================================================


struct  BFs7ll_BFs7s_BFs7c_BFs7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7c_BFs7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7c_BFs7c, BFs7ll_BFs7s_BFs7c_BFs7c)
//============================================================================


struct  BFs7ll_BFs7s_BFs7c_BFs7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7c_BFs7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7c_BFs7i, BFs7ll_BFs7s_BFs7c_BFs7i)
//============================================================================


struct  BFs7ll_BFs7s_BFs7c_BFs7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7c_BFs7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7c_BFs7ll, BFs7ll_BFs7s_BFs7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFs7c_BFs7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7c_BFs7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7c_BFs7s, BFs7ll_BFs7s_BFs7c_BFs7s)
//============================================================================


struct  BFs7ll_BFs7s_BFs7c_BFu7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7c_BFu7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7c_BFu7c, BFs7ll_BFs7s_BFs7c_BFu7c)
//============================================================================


struct  BFs7ll_BFs7s_BFs7c_BFu7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7c_BFu7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7c_BFu7i, BFs7ll_BFs7s_BFs7c_BFu7i)
//============================================================================


struct  BFs7ll_BFs7s_BFs7c_BFu7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7c_BFu7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7c_BFu7ll, BFs7ll_BFs7s_BFs7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFs7c_BFu7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7c_BFu7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7c_BFu7s, BFs7ll_BFs7s_BFs7c_BFu7s)
//============================================================================


struct  BFs7ll_BFs7s_BFs7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed int v3:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7i) C1{ FL:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7i, BFs7ll_BFs7s_BFs7i)
//============================================================================


struct  BFs7ll_BFs7s_BFs7i_BFs7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7i_BFs7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7i_BFs7c, BFs7ll_BFs7s_BFs7i_BFs7c)
//============================================================================


struct  BFs7ll_BFs7s_BFs7i_BFs7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7i_BFs7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7i_BFs7i, BFs7ll_BFs7s_BFs7i_BFs7i)
//============================================================================


struct  BFs7ll_BFs7s_BFs7i_BFs7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7i_BFs7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7i_BFs7ll, BFs7ll_BFs7s_BFs7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFs7i_BFs7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7i_BFs7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7i_BFs7s, BFs7ll_BFs7s_BFs7i_BFs7s)
//============================================================================


struct  BFs7ll_BFs7s_BFs7i_BFu7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7i_BFu7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7i_BFu7c, BFs7ll_BFs7s_BFs7i_BFu7c)
//============================================================================


struct  BFs7ll_BFs7s_BFs7i_BFu7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7i_BFu7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7i_BFu7i, BFs7ll_BFs7s_BFs7i_BFu7i)
//============================================================================


struct  BFs7ll_BFs7s_BFs7i_BFu7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7i_BFu7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7i_BFu7ll, BFs7ll_BFs7s_BFs7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFs7i_BFu7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7i_BFu7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7i_BFu7s, BFs7ll_BFs7s_BFs7i_BFu7s)
//============================================================================


struct  BFs7ll_BFs7s_BFs7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7ll) C1{ FL:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7ll, BFs7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFs7ll_BFs7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7ll_BFs7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7ll_BFs7c, BFs7ll_BFs7s_BFs7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFs7s_BFs7ll_BFs7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7ll_BFs7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7ll_BFs7i, BFs7ll_BFs7s_BFs7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFs7s_BFs7ll_BFs7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7ll_BFs7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7ll_BFs7ll, BFs7ll_BFs7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFs7ll_BFs7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7ll_BFs7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7ll_BFs7s, BFs7ll_BFs7s_BFs7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFs7s_BFs7ll_BFu7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7ll_BFu7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7ll_BFu7c, BFs7ll_BFs7s_BFs7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFs7s_BFs7ll_BFu7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7ll_BFu7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7ll_BFu7i, BFs7ll_BFs7s_BFs7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFs7s_BFs7ll_BFu7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7ll_BFu7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7ll_BFu7ll, BFs7ll_BFs7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFs7ll_BFu7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7ll_BFu7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7ll_BFu7s, BFs7ll_BFs7s_BFs7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFs7s_BFs7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed short v3:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7s) C1{ FL:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7s, BFs7ll_BFs7s_BFs7s)
//============================================================================


struct  BFs7ll_BFs7s_BFs7s_BFs7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7s_BFs7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7s_BFs7c, BFs7ll_BFs7s_BFs7s_BFs7c)
//============================================================================


struct  BFs7ll_BFs7s_BFs7s_BFs7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7s_BFs7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7s_BFs7i, BFs7ll_BFs7s_BFs7s_BFs7i)
//============================================================================


struct  BFs7ll_BFs7s_BFs7s_BFs7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7s_BFs7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7s_BFs7ll, BFs7ll_BFs7s_BFs7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFs7s_BFs7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7s_BFs7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7s_BFs7s, BFs7ll_BFs7s_BFs7s_BFs7s)
//============================================================================


struct  BFs7ll_BFs7s_BFs7s_BFu7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7s_BFu7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7s_BFu7c, BFs7ll_BFs7s_BFs7s_BFu7c)
//============================================================================


struct  BFs7ll_BFs7s_BFs7s_BFu7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7s_BFu7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7s_BFu7i, BFs7ll_BFs7s_BFs7s_BFu7i)
//============================================================================


struct  BFs7ll_BFs7s_BFs7s_BFu7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7s_BFu7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7s_BFu7ll, BFs7ll_BFs7s_BFs7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFs7s_BFu7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFs7s_BFu7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFs7s_BFu7s, BFs7ll_BFs7s_BFs7s_BFu7s)
//============================================================================


struct  BFs7ll_BFs7s_BFu7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7c) C1{ FL:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7c, BFs7ll_BFs7s_BFu7c)
//============================================================================


struct  BFs7ll_BFs7s_BFu7c_BFs7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7c_BFs7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7c_BFs7c, BFs7ll_BFs7s_BFu7c_BFs7c)
//============================================================================


struct  BFs7ll_BFs7s_BFu7c_BFs7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7c_BFs7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7c_BFs7i, BFs7ll_BFs7s_BFu7c_BFs7i)
//============================================================================


struct  BFs7ll_BFs7s_BFu7c_BFs7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7c_BFs7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7c_BFs7ll, BFs7ll_BFs7s_BFu7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFu7c_BFs7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7c_BFs7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7c_BFs7s, BFs7ll_BFs7s_BFu7c_BFs7s)
//============================================================================


struct  BFs7ll_BFs7s_BFu7c_BFu7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7c_BFu7c) C1{ FL:7 Fs:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7c_BFu7c, BFs7ll_BFs7s_BFu7c_BFu7c)
//============================================================================


struct  BFs7ll_BFs7s_BFu7c_BFu7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7c_BFu7i) C1{ FL:7 Fs:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7c_BFu7i, BFs7ll_BFs7s_BFu7c_BFu7i)
//============================================================================


struct  BFs7ll_BFs7s_BFu7c_BFu7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7c_BFu7ll) C1{ FL:7 Fs:7 Fc:7 FL:7}



static void Test_BFs7ll_BFs7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7c_BFu7ll, BFs7ll_BFs7s_BFu7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFu7c_BFu7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7c_BFu7s) C1{ FL:7 Fs:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7c_BFu7s, BFs7ll_BFs7s_BFu7c_BFu7s)
//============================================================================


struct  BFs7ll_BFs7s_BFu7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7i) C1{ FL:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7i, BFs7ll_BFs7s_BFu7i)
//============================================================================


struct  BFs7ll_BFs7s_BFu7i_BFs7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7i_BFs7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7i_BFs7c, BFs7ll_BFs7s_BFu7i_BFs7c)
//============================================================================


struct  BFs7ll_BFs7s_BFu7i_BFs7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7i_BFs7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7i_BFs7i, BFs7ll_BFs7s_BFu7i_BFs7i)
//============================================================================


struct  BFs7ll_BFs7s_BFu7i_BFs7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7i_BFs7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7i_BFs7ll, BFs7ll_BFs7s_BFu7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFu7i_BFs7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7i_BFs7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7i_BFs7s, BFs7ll_BFs7s_BFu7i_BFs7s)
//============================================================================


struct  BFs7ll_BFs7s_BFu7i_BFu7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7i_BFu7c) C1{ FL:7 Fs:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7i_BFu7c, BFs7ll_BFs7s_BFu7i_BFu7c)
//============================================================================


struct  BFs7ll_BFs7s_BFu7i_BFu7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7i_BFu7i) C1{ FL:7 Fs:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7i_BFu7i, BFs7ll_BFs7s_BFu7i_BFu7i)
//============================================================================


struct  BFs7ll_BFs7s_BFu7i_BFu7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7i_BFu7ll) C1{ FL:7 Fs:7 Fi:7 FL:7}



static void Test_BFs7ll_BFs7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7i_BFu7ll, BFs7ll_BFs7s_BFu7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFu7i_BFu7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7i_BFu7s) C1{ FL:7 Fs:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7i_BFu7s, BFs7ll_BFs7s_BFu7i_BFu7s)
//============================================================================


struct  BFs7ll_BFs7s_BFu7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7ll) C1{ FL:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7ll, BFs7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFu7ll_BFs7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7ll_BFs7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7ll_BFs7c, BFs7ll_BFs7s_BFu7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFs7s_BFu7ll_BFs7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7ll_BFs7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7ll_BFs7i, BFs7ll_BFs7s_BFu7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFs7s_BFu7ll_BFs7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7ll_BFs7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7ll_BFs7ll, BFs7ll_BFs7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFu7ll_BFs7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7ll_BFs7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7ll_BFs7s, BFs7ll_BFs7s_BFu7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFs7s_BFu7ll_BFu7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7ll_BFu7c) C1{ FL:7 Fs:7 FL:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7ll_BFu7c, BFs7ll_BFs7s_BFu7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFs7s_BFu7ll_BFu7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7ll_BFu7i) C1{ FL:7 Fs:7 FL:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7ll_BFu7i, BFs7ll_BFs7s_BFu7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFs7s_BFu7ll_BFu7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7ll_BFu7ll) C1{ FL:7 Fs:7 FL:7 FL:7}



static void Test_BFs7ll_BFs7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7ll_BFu7ll, BFs7ll_BFs7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFu7ll_BFu7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7ll_BFu7s) C1{ FL:7 Fs:7 FL:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7ll_BFu7s, BFs7ll_BFs7s_BFu7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFs7s_BFu7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7s) C1{ FL:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7s, BFs7ll_BFs7s_BFu7s)
//============================================================================


struct  BFs7ll_BFs7s_BFu7s_BFs7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7s_BFs7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7s_BFs7c, BFs7ll_BFs7s_BFu7s_BFs7c)
//============================================================================


struct  BFs7ll_BFs7s_BFu7s_BFs7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7s_BFs7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7s_BFs7i, BFs7ll_BFs7s_BFu7s_BFs7i)
//============================================================================


struct  BFs7ll_BFs7s_BFu7s_BFs7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7s_BFs7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7s_BFs7ll, BFs7ll_BFs7s_BFu7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFu7s_BFs7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7s_BFs7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7s_BFs7s, BFs7ll_BFs7s_BFu7s_BFs7s)
//============================================================================


struct  BFs7ll_BFs7s_BFu7s_BFu7c  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7s_BFu7c) C1{ FL:7 Fs:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFs7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7s_BFu7c, BFs7ll_BFs7s_BFu7s_BFu7c)
//============================================================================


struct  BFs7ll_BFs7s_BFu7s_BFu7i  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7s_BFu7i) C1{ FL:7 Fs:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFs7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7s_BFu7i, BFs7ll_BFs7s_BFu7s_BFu7i)
//============================================================================


struct  BFs7ll_BFs7s_BFu7s_BFu7ll  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7s_BFu7ll) C1{ FL:7 Fs:7 Fs:7 FL:7}



static void Test_BFs7ll_BFs7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7s_BFu7ll, BFs7ll_BFs7s_BFu7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFs7s_BFu7s_BFu7s  {
  signed __tsi64 v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFs7s_BFu7s_BFu7s) C1{ FL:7 Fs:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFs7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFs7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFs7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFs7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFs7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFs7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFs7s_BFu7s_BFu7s, BFs7ll_BFs7s_BFu7s_BFu7s)
//============================================================================


struct  BFs7ll_BFu7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
};
//SIG(1 BFs7ll_BFu7c) C1{ FL:7 Fc:7}



static void Test_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c, BFs7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFu7c_BFs7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7c) C1{ FL:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7c, BFs7ll_BFu7c_BFs7c)
//============================================================================


struct  BFs7ll_BFu7c_BFs7c_BFs7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7c_BFs7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7c_BFs7c, BFs7ll_BFu7c_BFs7c_BFs7c)
//============================================================================


struct  BFs7ll_BFu7c_BFs7c_BFs7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7c_BFs7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7c_BFs7i, BFs7ll_BFu7c_BFs7c_BFs7i)
//============================================================================


struct  BFs7ll_BFu7c_BFs7c_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7c_BFs7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7ll_BFu7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7c_BFs7ll, BFs7ll_BFu7c_BFs7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFs7c_BFs7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7c_BFs7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7c_BFs7s, BFs7ll_BFu7c_BFs7c_BFs7s)
//============================================================================


struct  BFs7ll_BFu7c_BFs7c_BFu7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7c_BFu7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7c_BFu7c, BFs7ll_BFu7c_BFs7c_BFu7c)
//============================================================================


struct  BFs7ll_BFu7c_BFs7c_BFu7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7c_BFu7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7c_BFu7i, BFs7ll_BFu7c_BFs7c_BFu7i)
//============================================================================


struct  BFs7ll_BFu7c_BFs7c_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7c_BFu7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7ll_BFu7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7c_BFu7ll, BFs7ll_BFu7c_BFs7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFs7c_BFu7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7c_BFu7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7c_BFu7s, BFs7ll_BFu7c_BFs7c_BFu7s)
//============================================================================


struct  BFs7ll_BFu7c_BFs7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7i) C1{ FL:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7i, BFs7ll_BFu7c_BFs7i)
//============================================================================


struct  BFs7ll_BFu7c_BFs7i_BFs7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7i_BFs7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7i_BFs7c, BFs7ll_BFu7c_BFs7i_BFs7c)
//============================================================================


struct  BFs7ll_BFu7c_BFs7i_BFs7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7i_BFs7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7i_BFs7i, BFs7ll_BFu7c_BFs7i_BFs7i)
//============================================================================


struct  BFs7ll_BFu7c_BFs7i_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7i_BFs7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7ll_BFu7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7i_BFs7ll, BFs7ll_BFu7c_BFs7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFs7i_BFs7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7i_BFs7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7i_BFs7s, BFs7ll_BFu7c_BFs7i_BFs7s)
//============================================================================


struct  BFs7ll_BFu7c_BFs7i_BFu7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7i_BFu7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7i_BFu7c, BFs7ll_BFu7c_BFs7i_BFu7c)
//============================================================================


struct  BFs7ll_BFu7c_BFs7i_BFu7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7i_BFu7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7i_BFu7i, BFs7ll_BFu7c_BFs7i_BFu7i)
//============================================================================


struct  BFs7ll_BFu7c_BFs7i_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7i_BFu7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7ll_BFu7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7i_BFu7ll, BFs7ll_BFu7c_BFs7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFs7i_BFu7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7i_BFu7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7i_BFu7s, BFs7ll_BFu7c_BFs7i_BFu7s)
//============================================================================


struct  BFs7ll_BFu7c_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7ll) C1{ FL:7 Fc:7 FL:7}



static void Test_BFs7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7ll, BFs7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFs7ll_BFs7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7ll_BFs7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7ll_BFs7c, BFs7ll_BFu7c_BFs7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFu7c_BFs7ll_BFs7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7ll_BFs7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7ll_BFs7i, BFs7ll_BFu7c_BFs7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFu7c_BFs7ll_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7ll_BFs7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFs7ll_BFu7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7ll_BFs7ll, BFs7ll_BFu7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFs7ll_BFs7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7ll_BFs7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7ll_BFs7s, BFs7ll_BFu7c_BFs7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFu7c_BFs7ll_BFu7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7ll_BFu7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7ll_BFu7c, BFs7ll_BFu7c_BFs7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFu7c_BFs7ll_BFu7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7ll_BFu7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7ll_BFu7i, BFs7ll_BFu7c_BFs7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFu7c_BFs7ll_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7ll_BFu7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFs7ll_BFu7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7ll_BFu7ll, BFs7ll_BFu7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFs7ll_BFu7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7ll_BFu7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7ll_BFu7s, BFs7ll_BFu7c_BFs7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFu7c_BFs7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7s) C1{ FL:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7s, BFs7ll_BFu7c_BFs7s)
//============================================================================


struct  BFs7ll_BFu7c_BFs7s_BFs7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7s_BFs7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7s_BFs7c, BFs7ll_BFu7c_BFs7s_BFs7c)
//============================================================================


struct  BFs7ll_BFu7c_BFs7s_BFs7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7s_BFs7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7s_BFs7i, BFs7ll_BFu7c_BFs7s_BFs7i)
//============================================================================


struct  BFs7ll_BFu7c_BFs7s_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7s_BFs7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7ll_BFu7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7s_BFs7ll, BFs7ll_BFu7c_BFs7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFs7s_BFs7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7s_BFs7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7s_BFs7s, BFs7ll_BFu7c_BFs7s_BFs7s)
//============================================================================


struct  BFs7ll_BFu7c_BFs7s_BFu7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7s_BFu7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7s_BFu7c, BFs7ll_BFu7c_BFs7s_BFu7c)
//============================================================================


struct  BFs7ll_BFu7c_BFs7s_BFu7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7s_BFu7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7s_BFu7i, BFs7ll_BFu7c_BFs7s_BFu7i)
//============================================================================


struct  BFs7ll_BFu7c_BFs7s_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7s_BFu7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7ll_BFu7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7s_BFu7ll, BFs7ll_BFu7c_BFs7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFs7s_BFu7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFs7s_BFu7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFs7s_BFu7s, BFs7ll_BFu7c_BFs7s_BFu7s)
//============================================================================


struct  BFs7ll_BFu7c_BFu7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7c) C1{ FL:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7c, BFs7ll_BFu7c_BFu7c)
//============================================================================


struct  BFs7ll_BFu7c_BFu7c_BFs7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7c_BFs7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7c_BFs7c, BFs7ll_BFu7c_BFu7c_BFs7c)
//============================================================================


struct  BFs7ll_BFu7c_BFu7c_BFs7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7c_BFs7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7c_BFs7i, BFs7ll_BFu7c_BFu7c_BFs7i)
//============================================================================


struct  BFs7ll_BFu7c_BFu7c_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7c_BFs7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7ll_BFu7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7c_BFs7ll, BFs7ll_BFu7c_BFu7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFu7c_BFs7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7c_BFs7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7c_BFs7s, BFs7ll_BFu7c_BFu7c_BFs7s)
//============================================================================


struct  BFs7ll_BFu7c_BFu7c_BFu7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7c_BFu7c) C1{ FL:7 Fc:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7c_BFu7c, BFs7ll_BFu7c_BFu7c_BFu7c)
//============================================================================


struct  BFs7ll_BFu7c_BFu7c_BFu7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7c_BFu7i) C1{ FL:7 Fc:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7c_BFu7i, BFs7ll_BFu7c_BFu7c_BFu7i)
//============================================================================


struct  BFs7ll_BFu7c_BFu7c_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7c_BFu7ll) C1{ FL:7 Fc:7 Fc:7 FL:7}



static void Test_BFs7ll_BFu7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7c_BFu7ll, BFs7ll_BFu7c_BFu7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFu7c_BFu7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7c_BFu7s) C1{ FL:7 Fc:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7c_BFu7s, BFs7ll_BFu7c_BFu7c_BFu7s)
//============================================================================


struct  BFs7ll_BFu7c_BFu7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7i) C1{ FL:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7i, BFs7ll_BFu7c_BFu7i)
//============================================================================


struct  BFs7ll_BFu7c_BFu7i_BFs7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7i_BFs7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7i_BFs7c, BFs7ll_BFu7c_BFu7i_BFs7c)
//============================================================================


struct  BFs7ll_BFu7c_BFu7i_BFs7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7i_BFs7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7i_BFs7i, BFs7ll_BFu7c_BFu7i_BFs7i)
//============================================================================


struct  BFs7ll_BFu7c_BFu7i_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7i_BFs7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7ll_BFu7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7i_BFs7ll, BFs7ll_BFu7c_BFu7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFu7i_BFs7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7i_BFs7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7i_BFs7s, BFs7ll_BFu7c_BFu7i_BFs7s)
//============================================================================


struct  BFs7ll_BFu7c_BFu7i_BFu7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7i_BFu7c) C1{ FL:7 Fc:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7i_BFu7c, BFs7ll_BFu7c_BFu7i_BFu7c)
//============================================================================


struct  BFs7ll_BFu7c_BFu7i_BFu7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7i_BFu7i) C1{ FL:7 Fc:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7i_BFu7i, BFs7ll_BFu7c_BFu7i_BFu7i)
//============================================================================


struct  BFs7ll_BFu7c_BFu7i_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7i_BFu7ll) C1{ FL:7 Fc:7 Fi:7 FL:7}



static void Test_BFs7ll_BFu7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7i_BFu7ll, BFs7ll_BFu7c_BFu7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFu7i_BFu7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7i_BFu7s) C1{ FL:7 Fc:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7i_BFu7s, BFs7ll_BFu7c_BFu7i_BFu7s)
//============================================================================


struct  BFs7ll_BFu7c_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7ll) C1{ FL:7 Fc:7 FL:7}



static void Test_BFs7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7ll, BFs7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFu7ll_BFs7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7ll_BFs7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7ll_BFs7c, BFs7ll_BFu7c_BFu7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFu7c_BFu7ll_BFs7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7ll_BFs7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7ll_BFs7i, BFs7ll_BFu7c_BFu7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFu7c_BFu7ll_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7ll_BFs7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFs7ll_BFu7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7ll_BFs7ll, BFs7ll_BFu7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFu7ll_BFs7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7ll_BFs7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7ll_BFs7s, BFs7ll_BFu7c_BFu7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFu7c_BFu7ll_BFu7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7ll_BFu7c) C1{ FL:7 Fc:7 FL:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7ll_BFu7c, BFs7ll_BFu7c_BFu7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFu7c_BFu7ll_BFu7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7ll_BFu7i) C1{ FL:7 Fc:7 FL:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7ll_BFu7i, BFs7ll_BFu7c_BFu7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFu7c_BFu7ll_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7ll_BFu7ll) C1{ FL:7 Fc:7 FL:7 FL:7}



static void Test_BFs7ll_BFu7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7ll_BFu7ll, BFs7ll_BFu7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFu7ll_BFu7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7ll_BFu7s) C1{ FL:7 Fc:7 FL:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFs7ll_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7ll_BFu7s, BFs7ll_BFu7c_BFu7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFu7c_BFu7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7s) C1{ FL:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7s, BFs7ll_BFu7c_BFu7s)
//============================================================================


struct  BFs7ll_BFu7c_BFu7s_BFs7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7s_BFs7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7s_BFs7c, BFs7ll_BFu7c_BFu7s_BFs7c)
//============================================================================


struct  BFs7ll_BFu7c_BFu7s_BFs7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7s_BFs7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7s_BFs7i, BFs7ll_BFu7c_BFu7s_BFs7i)
//============================================================================


struct  BFs7ll_BFu7c_BFu7s_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7s_BFs7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7ll_BFu7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7s_BFs7ll, BFs7ll_BFu7c_BFu7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFu7s_BFs7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7s_BFs7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7s_BFs7s, BFs7ll_BFu7c_BFu7s_BFs7s)
//============================================================================


struct  BFs7ll_BFu7c_BFu7s_BFu7c  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7s_BFu7c) C1{ FL:7 Fc:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFu7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7s_BFu7c, BFs7ll_BFu7c_BFu7s_BFu7c)
//============================================================================


struct  BFs7ll_BFu7c_BFu7s_BFu7i  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7s_BFu7i) C1{ FL:7 Fc:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFu7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7s_BFu7i, BFs7ll_BFu7c_BFu7s_BFu7i)
//============================================================================


struct  BFs7ll_BFu7c_BFu7s_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7s_BFu7ll) C1{ FL:7 Fc:7 Fs:7 FL:7}



static void Test_BFs7ll_BFu7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7s_BFu7ll, BFs7ll_BFu7c_BFu7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7c_BFu7s_BFu7s  {
  signed __tsi64 v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7c_BFu7s_BFu7s) C1{ FL:7 Fc:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFu7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7c_BFu7s_BFu7s, BFs7ll_BFu7c_BFu7s_BFu7s)
//============================================================================


struct  BFs7ll_BFu7i  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
};
//SIG(1 BFs7ll_BFu7i) C1{ FL:7 Fi:7}



static void Test_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i, BFs7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFu7i_BFs7c  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7c) C1{ FL:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7c, BFs7ll_BFu7i_BFs7c)
//============================================================================


struct  BFs7ll_BFu7i_BFs7c_BFs7c  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7c_BFs7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFu7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7c_BFs7c, BFs7ll_BFu7i_BFs7c_BFs7c)
//============================================================================


struct  BFs7ll_BFu7i_BFs7c_BFs7i  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7c_BFs7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFu7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7c_BFs7i, BFs7ll_BFu7i_BFs7c_BFs7i)
//============================================================================


struct  BFs7ll_BFu7i_BFs7c_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7c_BFs7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7ll_BFu7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7c_BFs7ll, BFs7ll_BFu7i_BFs7c_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7i_BFs7c_BFs7s  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7c_BFs7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFu7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7c_BFs7s, BFs7ll_BFu7i_BFs7c_BFs7s)
//============================================================================


struct  BFs7ll_BFu7i_BFs7c_BFu7c  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7c_BFu7c) C1{ FL:7 Fi:7 Fc:7 Fc:7}



static void Test_BFs7ll_BFu7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7c_BFu7c, BFs7ll_BFu7i_BFs7c_BFu7c)
//============================================================================


struct  BFs7ll_BFu7i_BFs7c_BFu7i  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7c_BFu7i) C1{ FL:7 Fi:7 Fc:7 Fi:7}



static void Test_BFs7ll_BFu7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7c_BFu7i, BFs7ll_BFu7i_BFs7c_BFu7i)
//============================================================================


struct  BFs7ll_BFu7i_BFs7c_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7c_BFu7ll) C1{ FL:7 Fi:7 Fc:7 FL:7}



static void Test_BFs7ll_BFu7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7c_BFu7ll, BFs7ll_BFu7i_BFs7c_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7i_BFs7c_BFu7s  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7c_BFu7s) C1{ FL:7 Fi:7 Fc:7 Fs:7}



static void Test_BFs7ll_BFu7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7c_BFu7s, BFs7ll_BFu7i_BFs7c_BFu7s)
//============================================================================


struct  BFs7ll_BFu7i_BFs7i  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7i) C1{ FL:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7i, BFs7ll_BFu7i_BFs7i)
//============================================================================


struct  BFs7ll_BFu7i_BFs7i_BFs7c  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7i_BFs7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFu7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7i_BFs7c, BFs7ll_BFu7i_BFs7i_BFs7c)
//============================================================================


struct  BFs7ll_BFu7i_BFs7i_BFs7i  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7i_BFs7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFu7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7i_BFs7i, BFs7ll_BFu7i_BFs7i_BFs7i)
//============================================================================


struct  BFs7ll_BFu7i_BFs7i_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7i_BFs7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7ll_BFu7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7i_BFs7ll, BFs7ll_BFu7i_BFs7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7i_BFs7i_BFs7s  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7i_BFs7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFu7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7i_BFs7s, BFs7ll_BFu7i_BFs7i_BFs7s)
//============================================================================


struct  BFs7ll_BFu7i_BFs7i_BFu7c  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7i_BFu7c) C1{ FL:7 Fi:7 Fi:7 Fc:7}



static void Test_BFs7ll_BFu7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7i_BFu7c, BFs7ll_BFu7i_BFs7i_BFu7c)
//============================================================================


struct  BFs7ll_BFu7i_BFs7i_BFu7i  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7i_BFu7i) C1{ FL:7 Fi:7 Fi:7 Fi:7}



static void Test_BFs7ll_BFu7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7i_BFu7i, BFs7ll_BFu7i_BFs7i_BFu7i)
//============================================================================


struct  BFs7ll_BFu7i_BFs7i_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7i_BFu7ll) C1{ FL:7 Fi:7 Fi:7 FL:7}



static void Test_BFs7ll_BFu7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7i_BFu7ll, BFs7ll_BFu7i_BFs7i_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7i_BFs7i_BFu7s  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7i_BFu7s) C1{ FL:7 Fi:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFu7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7i_BFu7s, BFs7ll_BFu7i_BFs7i_BFu7s)
//============================================================================


struct  BFs7ll_BFu7i_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7ll) C1{ FL:7 Fi:7 FL:7}



static void Test_BFs7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7ll, BFs7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7i_BFs7ll_BFs7c  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7ll_BFs7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7ll_BFu7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7ll_BFs7c, BFs7ll_BFu7i_BFs7ll_BFs7c)
//============================================================================


struct  BFs7ll_BFu7i_BFs7ll_BFs7i  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7ll_BFs7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7ll_BFu7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7ll_BFs7i, BFs7ll_BFu7i_BFs7ll_BFs7i)
//============================================================================


struct  BFs7ll_BFu7i_BFs7ll_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7ll_BFs7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFs7ll_BFu7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7ll_BFs7ll, BFs7ll_BFu7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7i_BFs7ll_BFs7s  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7ll_BFs7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7ll_BFu7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7ll_BFs7s, BFs7ll_BFu7i_BFs7ll_BFs7s)
//============================================================================


struct  BFs7ll_BFu7i_BFs7ll_BFu7c  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7ll_BFu7c) C1{ FL:7 Fi:7 FL:7 Fc:7}



static void Test_BFs7ll_BFu7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7ll_BFu7c, BFs7ll_BFu7i_BFs7ll_BFu7c)
//============================================================================


struct  BFs7ll_BFu7i_BFs7ll_BFu7i  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7ll_BFu7i) C1{ FL:7 Fi:7 FL:7 Fi:7}



static void Test_BFs7ll_BFu7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7ll_BFu7i, BFs7ll_BFu7i_BFs7ll_BFu7i)
//============================================================================


struct  BFs7ll_BFu7i_BFs7ll_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7ll_BFu7ll) C1{ FL:7 Fi:7 FL:7 FL:7}



static void Test_BFs7ll_BFu7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7ll_BFu7ll, BFs7ll_BFu7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7i_BFs7ll_BFu7s  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7ll_BFu7s) C1{ FL:7 Fi:7 FL:7 Fs:7}



static void Test_BFs7ll_BFu7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFs7ll_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7ll_BFu7s, BFs7ll_BFu7i_BFs7ll_BFu7s)
//============================================================================


struct  BFs7ll_BFu7i_BFs7s  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7s) C1{ FL:7 Fi:7 Fs:7}



static void Test_BFs7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7s, BFs7ll_BFu7i_BFs7s)
//============================================================================


struct  BFs7ll_BFu7i_BFs7s_BFs7c  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7s_BFs7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFu7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7s_BFs7c, BFs7ll_BFu7i_BFs7s_BFs7c)
//============================================================================


struct  BFs7ll_BFu7i_BFs7s_BFs7i  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7s_BFs7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFu7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7s_BFs7i, BFs7ll_BFu7i_BFs7s_BFs7i)
//============================================================================


struct  BFs7ll_BFu7i_BFs7s_BFs7ll  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7s_BFs7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7ll_BFu7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7s_BFs7ll, BFs7ll_BFu7i_BFs7s_BFs7ll)
//============================================================================


struct  BFs7ll_BFu7i_BFs7s_BFs7s  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7s_BFs7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFu7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7s_BFs7s, BFs7ll_BFu7i_BFs7s_BFs7s)
//============================================================================


struct  BFs7ll_BFu7i_BFs7s_BFu7c  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7s_BFu7c) C1{ FL:7 Fi:7 Fs:7 Fc:7}



static void Test_BFs7ll_BFu7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7s_BFu7c, BFs7ll_BFu7i_BFs7s_BFu7c)
//============================================================================


struct  BFs7ll_BFu7i_BFs7s_BFu7i  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7s_BFu7i) C1{ FL:7 Fi:7 Fs:7 Fi:7}



static void Test_BFs7ll_BFu7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7s_BFu7i, BFs7ll_BFu7i_BFs7s_BFu7i)
//============================================================================


struct  BFs7ll_BFu7i_BFs7s_BFu7ll  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7s_BFu7ll) C1{ FL:7 Fi:7 Fs:7 FL:7}



static void Test_BFs7ll_BFu7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7s_BFu7ll, BFs7ll_BFu7i_BFs7s_BFu7ll)
//============================================================================


struct  BFs7ll_BFu7i_BFs7s_BFu7s  {
  signed __tsi64 v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFs7ll_BFu7i_BFs7s_BFu7s) C1{ FL:7 Fi:7 Fs:7 Fs:7}



static void Test_BFs7ll_BFu7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFs7ll_BFu7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFs7ll_BFu7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs7ll_BFu7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs7ll_BFu7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFs7ll_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFs7ll_BFu7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs7ll_BFu7i_BFs7s_BFu7s, BFs7ll_BFu7i_BFs7s_BFu7s)
//============================================================================

